Преглед изворни кода

😎【OpenApi】增加开放接口时间戳自动判断秒和毫秒的转换

zuohuaijun пре 1 година
родитељ
комит
8e0e36e48e

+ 1 - 1
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -38,7 +38,7 @@
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="3.8.0" />
     <PackageReference Include="SqlSugarCore" Version="5.1.4.169" />
     <PackageReference Include="SSH.NET" Version="2024.1.0" />
-    <PackageReference Include="System.Linq.Dynamic.Core" Version="1.4.5" />
+    <PackageReference Include="System.Linq.Dynamic.Core" Version="1.4.6" />
     <PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1104" />
     <PackageReference Include="UAParser" Version="3.1.47" />
     <PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />

+ 1 - 1
Admin.NET/Admin.NET.Core/SignatureAuth/SignatureAuthenticationHandler.cs

@@ -67,7 +67,7 @@ public sealed class SignatureAuthenticationHandler : AuthenticationHandler<Signa
         if (!long.TryParse(timestampStr, out var timestamp))
             return await AuthenticateResultFailAsync("timestamp 值不合法");
 
-        var requestDate = DateTimeUtil.ToLocalTimeDateBySeconds(timestamp);
+        var requestDate = DateTimeUtil.ConvertUnixTime(timestamp);
 
 #if NET6_0
         var utcNow = Clock.UtcNow;

+ 20 - 0
Admin.NET/Admin.NET.Core/Util/DateTimeUtil.cs

@@ -8,6 +8,26 @@ namespace Admin.NET.Core;
 
 public class DateTimeUtil
 {
+    /// <summary>
+    /// 根据unix时间戳的长度自动判断是秒还是以毫秒为单位
+    /// </summary>
+    /// <param name="unixTime"></param>
+    /// <returns></returns>
+    public static DateTime ConvertUnixTime(long unixTime)
+    {
+        // 判断时间戳长度
+        bool isMilliseconds = unixTime > 9999999999;
+
+        if (isMilliseconds)
+        {
+            return DateTimeOffset.FromUnixTimeMilliseconds(unixTime).ToLocalTime().DateTime;
+        }
+        else
+        {
+            return DateTimeOffset.FromUnixTimeSeconds(unixTime).ToLocalTime().DateTime;
+        }
+    }
+
     /// <summary>
     /// 获取开始时间
     /// </summary>