Skip to content

Commit c52074d

Browse files
committed
[增加]1. 增加时间差的处理
1 parent 7cef890 commit c52074d

1 file changed

Lines changed: 81 additions & 12 deletions

File tree

GameFrameX.Utility/TimeHelper.cs

Lines changed: 81 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)