@@ -16,39 +16,108 @@ public static class TimeHelper
1616 public static readonly DateTime EpochUtc = TimeZoneInfo . ConvertTime ( new DateTime ( 1970 , 1 , 1 ) , TimeZoneInfo . Utc ) ;
1717
1818 /// <summary>
19- /// 当前UTC 时间 秒时间戳
19+ /// 时区偏移秒数。用于调整时间计算的偏移量。
20+ /// 正值表示向未来偏移,负值表示向过去偏移。
2021 /// </summary>
21- /// <returns>当前UTC时间的秒时间戳。</returns>
22+ public static long TimeOffsetSeconds { get ; private set ; } = 0 ;
23+
24+ /// <summary>
25+ /// 时区偏移毫秒数。用于调整时间计算的偏移量。
26+ /// 正值表示向未来偏移,负值表示向过去偏移。
27+ /// </summary>
28+ public static long TimeOffsetMilliseconds { get ; private set ; } = 0 ;
29+
30+ /// <summary>
31+ /// 设置时区偏移值
32+ /// </summary>
33+ /// <param name="offsetSeconds">秒级偏移量</param>
34+ /// <param name="offsetMilliseconds">毫秒级偏移量</param>
35+ /// <remarks>
36+ /// 此方法用于调整时间计算的基准。
37+ /// 例如要模拟未来时间,可以传入正数;要模拟过去时间,可以传入负数。
38+ /// 通常用于调试和测试场景。
39+ /// </remarks>
40+ public static void SetTimeOffset ( long offsetSeconds , long offsetMilliseconds )
41+ {
42+ TimeOffsetSeconds = offsetSeconds ;
43+ TimeOffsetMilliseconds = offsetMilliseconds ;
44+ }
45+
46+ /// <summary>
47+ /// 重置时区偏移值为默认值(0)
48+ /// </summary>
49+ /// <remarks>
50+ /// 此方法会将秒级和毫秒级的偏移量都重置为0,
51+ /// 使时间计算恢复到未经调整的状态。
52+ /// </remarks>
53+ public static void ResetTimeOffset ( )
54+ {
55+ TimeOffsetSeconds = default ;
56+ TimeOffsetMilliseconds = default ;
57+ }
58+
59+ /// <summary>
60+ /// 获取当前UTC时间的秒级时间戳
61+ /// </summary>
62+ /// <returns>返回自1970年1月1日 00:00:00 UTC以来经过的秒数,加上时区偏移量</returns>
63+ /// <remarks>
64+ /// 此方法:
65+ /// 1. 获取当前UTC时间
66+ /// 2. 转换为Unix时间戳(秒)
67+ /// 3. 加上TimeOffsetSeconds偏移量
68+ /// 主要用于需要UTC时间戳的场景,如跨时区业务
69+ /// </remarks>
2270 public static long UnixTimeSeconds ( )
2371 {
24- return new DateTimeOffset ( DateTime . UtcNow ) . ToUnixTimeSeconds ( ) ;
72+ return new DateTimeOffset ( DateTime . UtcNow ) . ToUnixTimeSeconds ( ) + TimeOffsetSeconds ;
2573 }
2674
2775 /// <summary>
28- /// 当前UTC 时间 毫秒时间戳
76+ /// 获取当前UTC时间的毫秒级时间戳
2977 /// </summary>
30- /// <returns>当前UTC时间的毫秒时间戳。</returns>
78+ /// <returns>返回自1970年1月1日 00:00:00 UTC以来经过的毫秒数,加上时区偏移量</returns>
79+ /// <remarks>
80+ /// 此方法:
81+ /// 1. 获取当前UTC时间
82+ /// 2. 转换为Unix时间戳(毫秒)
83+ /// 3. 加上TimeOffsetMilliseconds偏移量
84+ /// 相比秒级时间戳提供更高的精度,适用于需要精确时间计算的场景
85+ /// </remarks>
3186 public static long UnixTimeMilliseconds ( )
3287 {
33- return new DateTimeOffset ( DateTime . UtcNow ) . ToUnixTimeMilliseconds ( ) ;
88+ return new DateTimeOffset ( DateTime . UtcNow ) . ToUnixTimeMilliseconds ( ) + TimeOffsetMilliseconds ;
3489 }
3590
3691 /// <summary>
37- /// 当前时区时间 秒时间戳
92+ /// 获取当前本地时区时间的秒级时间戳
3893 /// </summary>
39- /// <returns>当前时区时间的秒时间戳。</returns>
94+ /// <returns>返回自1970年1月1日 00:00:00以来经过的秒数(本地时区),加上时区偏移量</returns>
95+ /// <remarks>
96+ /// 此方法:
97+ /// 1. 获取当前本地时区时间
98+ /// 2. 转换为Unix时间戳(秒)
99+ /// 3. 加上TimeOffsetSeconds偏移量
100+ /// 主要用于需要本地时区时间戳的场景
101+ /// </remarks>
40102 public static long TimeSeconds ( )
41103 {
42- return new DateTimeOffset ( DateTime . Now ) . ToUnixTimeSeconds ( ) ;
104+ return new DateTimeOffset ( DateTime . Now ) . ToUnixTimeSeconds ( ) + TimeOffsetSeconds ;
43105 }
44106
45107 /// <summary>
46- /// 当前时区时间 毫秒时间戳
108+ /// 获取当前本地时区时间的毫秒级时间戳
47109 /// </summary>
48- /// <returns>当前时区时间的毫秒时间戳。</returns>
110+ /// <returns>返回自1970年1月1日 00:00:00以来经过的毫秒数(本地时区),加上时区偏移量</returns>
111+ /// <remarks>
112+ /// 此方法:
113+ /// 1. 获取当前本地时区时间
114+ /// 2. 转换为Unix时间戳(毫秒)
115+ /// 3. 加上TimeOffsetMilliseconds偏移量
116+ /// 相比秒级时间戳提供更高的精度,适用于需要精确时间计算的场景
117+ /// </remarks>
49118 public static long TimeMilliseconds ( )
50119 {
51- return new DateTimeOffset ( DateTime . Now ) . ToUnixTimeMilliseconds ( ) ;
120+ return new DateTimeOffset ( DateTime . Now ) . ToUnixTimeMilliseconds ( ) + TimeOffsetMilliseconds ;
52121 }
53122
54123 /// <summary>
0 commit comments