Skip to content

Commit 8a2592b

Browse files
committed
feat(utility): 添加带时区偏移的时间戳计算方法
添加 GetTodayStartTimestampWithTimeZone、GetTodayEndTimestampWithTimeZone 等方法 重构原有方法使用 DateTimeToUnixTimeSeconds 统一转换 支持需要伪造本地时间戳的场景
1 parent 88a4df3 commit 8a2592b

1 file changed

Lines changed: 77 additions & 32 deletions

File tree

GameFrameX.Foundation.Utility/Time/TimerHelper.Day.cs

Lines changed: 77 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,20 @@ public static DateTime GetTodayStartTime()
7777
public static long GetTodayStartTimestamp()
7878
{
7979
var date = GetTodayStartTime();
80-
return new DateTimeOffset(date, CurrentTimeZone.GetUtcOffset(date)).ToUnixTimeSeconds();
80+
return DateTimeToUnixTimeSeconds(date);
81+
}
82+
83+
/// <summary>
84+
/// 获取今天开始时间戳(基于设置时区)
85+
/// </summary>
86+
/// <returns>今天零点时间戳(秒) + 时区偏移</returns>
87+
/// <remarks>
88+
/// 返回值 = 标准Unix时间戳 + 时区偏移秒数
89+
/// 适用于需要伪造本地时间戳的场景
90+
/// </remarks>
91+
public static long GetTodayStartTimestampWithTimeZone()
92+
{
93+
return TimeToSecondsWithTimeZone(GetTodayStartTime());
8194
}
8295

8396
/// <summary>
@@ -106,9 +119,20 @@ public static DateTime GetTodayEndTime()
106119
public static long GetTodayEndTimestamp()
107120
{
108121
var date = GetTodayEndTime();
109-
return new DateTimeOffset(date, CurrentTimeZone.GetUtcOffset(date)).ToUnixTimeSeconds();
122+
return DateTimeToUnixTimeSeconds(date);
110123
}
111124

125+
/// <summary>
126+
/// 获取今天结束时间戳(基于设置时区)
127+
/// </summary>
128+
/// <returns>今天23:59:59的时间戳(秒) + 时区偏移</returns>
129+
/// <remarks>
130+
/// 返回值 = 标准Unix时间戳 + 时区偏移秒数
131+
/// </remarks>
132+
public static long GetTodayEndTimestampWithTimeZone()
133+
{
134+
return TimeToSecondsWithTimeZone(GetTodayEndTime());
135+
}
112136

113137
/// <summary>
114138
/// 获取指定日期的开始时间
@@ -138,21 +162,20 @@ public static DateTime GetStartTimeOfDay(DateTime date)
138162
public static long GetStartTimestampOfDay(DateTime date)
139163
{
140164
var targetDate = GetStartTimeOfDay(date);
141-
TimeSpan offset;
142-
if (targetDate.Kind == DateTimeKind.Utc)
143-
{
144-
offset = TimeSpan.Zero;
145-
}
146-
else if (targetDate.Kind == DateTimeKind.Local)
147-
{
148-
offset = TimeZoneInfo.Local.GetUtcOffset(targetDate);
149-
}
150-
else
151-
{
152-
offset = CurrentTimeZone.GetUtcOffset(targetDate);
153-
}
165+
return DateTimeToUnixTimeSeconds(targetDate);
166+
}
154167

155-
return new DateTimeOffset(targetDate, offset).ToUnixTimeSeconds();
168+
/// <summary>
169+
/// 获取指定日期的开始时间戳(基于设置时区)
170+
/// </summary>
171+
/// <param name="date">指定日期</param>
172+
/// <returns>指定日期零点时间戳(秒) + 时区偏移</returns>
173+
/// <remarks>
174+
/// 返回值 = 标准Unix时间戳 + 时区偏移秒数
175+
/// </remarks>
176+
public static long GetStartTimestampOfDayWithTimeZone(DateTime date)
177+
{
178+
return TimeToSecondsWithTimeZone(GetStartTimeOfDay(date));
156179
}
157180

158181
/// <summary>
@@ -183,21 +206,20 @@ public static DateTime GetEndTimeOfDay(DateTime date)
183206
public static long GetEndTimestampOfDay(DateTime date)
184207
{
185208
var targetDate = GetEndTimeOfDay(date);
186-
TimeSpan offset;
187-
if (targetDate.Kind == DateTimeKind.Utc)
188-
{
189-
offset = TimeSpan.Zero;
190-
}
191-
else if (targetDate.Kind == DateTimeKind.Local)
192-
{
193-
offset = TimeZoneInfo.Local.GetUtcOffset(targetDate);
194-
}
195-
else
196-
{
197-
offset = CurrentTimeZone.GetUtcOffset(targetDate);
198-
}
209+
return DateTimeToUnixTimeSeconds(targetDate);
210+
}
199211

200-
return new DateTimeOffset(targetDate, offset).ToUnixTimeSeconds();
212+
/// <summary>
213+
/// 获取指定日期的结束时间戳(基于设置时区)
214+
/// </summary>
215+
/// <param name="date">指定日期</param>
216+
/// <returns>指定日期23:59:59的时间戳(秒) + 时区偏移</returns>
217+
/// <remarks>
218+
/// 返回值 = 标准Unix时间戳 + 时区偏移秒数
219+
/// </remarks>
220+
public static long GetEndTimestampOfDayWithTimeZone(DateTime date)
221+
{
222+
return TimeToSecondsWithTimeZone(GetEndTimeOfDay(date));
201223
}
202224

203225
/// <summary>
@@ -227,7 +249,19 @@ public static DateTime GetTomorrowStartTime()
227249
public static long GetTomorrowStartTimestamp()
228250
{
229251
var date = GetTomorrowStartTime();
230-
return new DateTimeOffset(date, CurrentTimeZone.GetUtcOffset(date)).ToUnixTimeSeconds();
252+
return DateTimeToUnixTimeSeconds(date);
253+
}
254+
255+
/// <summary>
256+
/// 获取明天开始时间戳(基于设置时区)
257+
/// </summary>
258+
/// <returns>明天零点时间戳(秒) + 时区偏移</returns>
259+
/// <remarks>
260+
/// 返回值 = 标准Unix时间戳 + 时区偏移秒数
261+
/// </remarks>
262+
public static long GetTomorrowStartTimestampWithTimeZone()
263+
{
264+
return TimeToSecondsWithTimeZone(GetTomorrowStartTime());
231265
}
232266

233267
/// <summary>
@@ -255,9 +289,20 @@ public static DateTime GetTomorrowEndTime()
255289
/// </remarks>
256290
public static long GetTomorrowEndTimestamp()
257291
{
258-
return new DateTimeOffset(GetTomorrowEndTime()).ToUnixTimeSeconds();
292+
return DateTimeToUnixTimeSeconds(GetTomorrowEndTime());
259293
}
260294

295+
/// <summary>
296+
/// 获取明天结束时间戳(基于设置时区)
297+
/// </summary>
298+
/// <returns>明天23:59:59的时间戳(秒) + 时区偏移</returns>
299+
/// <remarks>
300+
/// 返回值 = 标准Unix时间戳 + 时区偏移秒数
301+
/// </remarks>
302+
public static long GetTomorrowEndTimestampWithTimeZone()
303+
{
304+
return TimeToSecondsWithTimeZone(GetTomorrowEndTime());
305+
}
261306

262307
/// <summary>
263308
/// 按照当前时区 (<see cref="CurrentTimeZone"/>) 时间判断两个时间戳是否是同一天

0 commit comments

Comments
 (0)