Skip to content

Commit 47afb76

Browse files
committed
[增加]1. 增加时间转换函数
1 parent 4a665fc commit 47afb76

File tree

2 files changed

+125
-72
lines changed

2 files changed

+125
-72
lines changed

GameFrameX.Utility/TimeHelper.cs

Lines changed: 123 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,6 @@ public static class TimeHelper
1515
/// </summary>
1616
public static readonly DateTime EpochUtc = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1), TimeZoneInfo.Utc);
1717

18-
/// <summary>
19-
/// 返回当前时间的毫秒表示。
20-
/// </summary>
21-
/// <returns>当前时间的毫秒数。</returns>
22-
public static long CurrentTimeMillis()
23-
{
24-
return TimeMillis(DateTime.Now);
25-
}
26-
2718
/// <summary>
2819
/// 当前UTC 时间 秒时间戳
2920
/// </summary>
@@ -42,6 +33,14 @@ public static long UnixTimeMilliseconds()
4233
return new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
4334
}
4435

36+
/// <summary>
37+
/// 当前时区时间 秒时间戳
38+
/// </summary>
39+
/// <returns>当前时区时间的秒时间戳。</returns>
40+
public static long TimeSeconds()
41+
{
42+
return new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds();
43+
}
4544

4645
/// <summary>
4746
/// 当前时区时间 毫秒时间戳
@@ -58,7 +57,7 @@ public static long TimeMilliseconds()
5857
/// <param name="time">指定时间。</param>
5958
/// <param name="utc">是否使用UTC时间。</param>
6059
/// <returns>距离纪元时间的毫秒数。</returns>
61-
public static long TimeMillis(DateTime time, bool utc = false)
60+
public static long TimeToMilliseconds(DateTime time, bool utc = false)
6261
{
6362
if (utc)
6463
{
@@ -74,7 +73,7 @@ public static long TimeMillis(DateTime time, bool utc = false)
7473
/// <param name="time">指定时间。</param>
7574
/// <param name="utc">是否使用UTC时间。</param>
7675
/// <returns>距离纪元时间的秒数。</returns>
77-
public static int TimeSecond(DateTime time, bool utc = false)
76+
public static int TimeToSecond(DateTime time, bool utc = false)
7877
{
7978
if (utc)
8079
{
@@ -84,14 +83,6 @@ public static int TimeSecond(DateTime time, bool utc = false)
8483
return (int)(time - EpochLocal).TotalSeconds;
8584
}
8685

87-
/// <summary>
88-
/// 当前时区时间 秒时间戳
89-
/// </summary>
90-
/// <returns>当前时区时间的秒时间戳。</returns>
91-
public static long TimeSeconds()
92-
{
93-
return new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds();
94-
}
9586

9687
/// <summary>
9788
/// 将Unix时间戳转换为自公元1年1月1日以来的刻度数。
@@ -125,60 +116,138 @@ public static long TimestampMillisToTicks(long timestampMillisSeconds)
125116
public static TimeSpan TimeSpanWithTimestamp(long timestamp)
126117
{
127118
// 计算当前时间与给定时间戳表示的时间之间的差值
128-
var timeSpan = MillisToDateTime(UnixTimeMilliseconds(), true) - MillisToDateTime(timestamp, true);
119+
var timeSpan = MillisecondsTimeStampToDateTime(UnixTimeMilliseconds(), true) - MillisecondsTimeStampToDateTime(timestamp, true);
120+
return timeSpan;
121+
}
122+
123+
/// <summary>
124+
/// 将给定的时间戳转换为相对于当前本地时间的 TimeSpan 对象。
125+
/// </summary>
126+
/// <param name="timestamp">自某个固定时间点(通常为1970年1月1日午夜)以来经过的毫秒数。</param>
127+
/// <returns>一个 TimeSpan 对象,表示从给定时间戳到当前本地时间的间隔。</returns>
128+
public static TimeSpan TimeSpanLocalWithTimestamp(long timestamp)
129+
{
130+
// 计算当前时间与给定时间戳表示的时间之间的差值
131+
var timeSpan = DateTime.Now - MillisecondsTimeStampToDateTime(timestamp, true);
129132
return timeSpan;
130133
}
131134

132135
/// <summary>
133136
/// 毫秒转时间
134137
/// </summary>
135-
/// <param name="time">毫秒数。</param>
138+
/// <param name="timestamp">毫秒时间戳。</param>
139+
/// <param name="utc">是否使用UTC时间。</param>
140+
/// <returns>转换后的时间。</returns>
141+
public static DateTime MillisecondsTimeStampToDateTime(long timestamp, bool utc = false)
142+
{
143+
if (utc)
144+
{
145+
return EpochUtc.AddMilliseconds(timestamp);
146+
}
147+
148+
return EpochLocal.AddMilliseconds(timestamp);
149+
}
150+
151+
/// <summary>
152+
/// 秒时间戳转时间
153+
/// </summary>
154+
/// <param name="timestamp">秒时间戳。</param>
136155
/// <param name="utc">是否使用UTC时间。</param>
137156
/// <returns>转换后的时间。</returns>
138-
public static DateTime MillisToDateTime(long time, bool utc = false)
157+
public static DateTime TimestampToDateTime(long timestamp, bool utc = false)
139158
{
140159
if (utc)
141160
{
142-
return EpochUtc.AddMilliseconds(time);
161+
return EpochUtc.AddSeconds(timestamp);
143162
}
144163

145-
return EpochLocal.AddMilliseconds(time);
164+
return EpochLocal.AddSeconds(timestamp);
165+
}
166+
167+
/// <summary>
168+
/// 获取从指定日期到当前UTC日期之间跨越的天数。
169+
/// </summary>
170+
/// <param name="startTime">起始日期。</param>
171+
/// <param name="hour">小时。</param>
172+
/// <returns>跨越的天数。</returns>
173+
public static int GetCrossDays(DateTime startTime, int hour = 0)
174+
{
175+
return GetCrossDays(startTime, DateTime.UtcNow, hour);
176+
}
177+
178+
/// <summary>
179+
/// 获取从指定日期到当前本地日期之间跨越的天数。
180+
/// </summary>
181+
/// <param name="startTime">起始日期。</param>
182+
/// <param name="hour">小时。</param>
183+
/// <returns>跨越的天数。</returns>
184+
public static int GetCrossLocalDays(DateTime startTime, int hour = 0)
185+
{
186+
return GetCrossDays(startTime, DateTime.Now, hour);
187+
}
188+
189+
/// <summary>
190+
/// 获取两个时间戳之间跨越的天数。
191+
/// </summary>
192+
/// <param name="beginTimestamp">起始时间戳,从1970年1月1日以来经过的秒数。</param>
193+
/// <param name="hour">小时。</param>
194+
/// <returns>跨越的天数。</returns>
195+
public static int GetCrossDays(long beginTimestamp, int hour = 0)
196+
{
197+
var begin = TimestampToDateTime(beginTimestamp);
198+
return GetCrossDays(begin, hour);
146199
}
147200

148201
/// <summary>
149-
/// 获取从指定日期到当前日期之间跨越的天数
202+
/// 获取两个UTC时间戳之间跨越的天数
150203
/// </summary>
151-
/// <param name="begin">起始日期。</param>
204+
/// <param name="beginTimestamp">开始时间戳(秒),从1970年1月1日以来经过的秒数。</param>
205+
/// <param name="afterTimestamp">结束时间戳(秒),从1970年1月1日以来经过的秒数。</param>
152206
/// <param name="hour">小时。</param>
153207
/// <returns>跨越的天数。</returns>
154-
public static int GetCrossDays(DateTime begin, int hour = 0)
208+
public static int GetCrossDays(long beginTimestamp, long afterTimestamp, int hour = 0)
155209
{
156-
return GetCrossDays(begin, DateTime.Now, hour);
210+
var begin = UtcToUtcDateTime(beginTimestamp);
211+
var after = UtcToUtcDateTime(afterTimestamp);
212+
return GetCrossDays(begin, after, hour);
157213
}
158214

159215
/// <summary>
160216
/// 获取两个日期之间跨越的天数。
161217
/// </summary>
162-
/// <param name="begin">起始日期。</param>
163-
/// <param name="after">结束日期。</param>
218+
/// <param name="startTime">起始日期。</param>
219+
/// <param name="endTime">结束日期。</param>
164220
/// <param name="hour">小时。</param>
165221
/// <returns>跨越的天数。</returns>
166-
public static int GetCrossDays(DateTime begin, DateTime after, int hour = 0)
222+
public static int GetCrossDays(DateTime startTime, DateTime endTime, int hour = 0)
167223
{
168-
var days = (int)(after.Date - begin.Date).TotalDays;
169-
if (begin.Hour < hour)
224+
var days = (int)(endTime.Date - startTime.Date).TotalDays;
225+
if (startTime.Hour < hour)
170226
{
171227
days++;
172228
}
173229

174-
if (after.Hour < hour)
230+
if (endTime.Hour < hour)
175231
{
176232
days--;
177233
}
178234

179235
return days;
180236
}
181237

238+
/// <summary>
239+
/// 获取两个本地时间戳之间的间隔天数
240+
/// </summary>
241+
/// <param name="startTimestamp">开始时间戳(秒)</param>
242+
/// <param name="endTimestamp">结束时间戳(秒)</param>
243+
/// <returns>间隔天数</returns>
244+
public static int GetCrossLocalDays(long startTimestamp, long endTimestamp)
245+
{
246+
var startTime = UtcToLocalDateTime(startTimestamp);
247+
var endTime = UtcToLocalDateTime(endTimestamp);
248+
return GetCrossDays(startTime, endTime);
249+
}
250+
182251
/// <summary>
183252
/// 判断当前时间是否与指定时间处于同一周。
184253
/// </summary>
@@ -329,6 +398,16 @@ public static DateTime UtcToUtcDateTime(long utcTimestamp)
329398
return DateTimeOffset.FromUnixTimeSeconds(utcTimestamp).UtcDateTime;
330399
}
331400

401+
/// <summary>
402+
/// UTC 毫秒时间戳 转换成UTC时间
403+
/// </summary>
404+
/// <param name="utcTimestampMilliseconds">UTC时间戳,单位毫秒</param>
405+
/// <returns>转换后的UTC时间。</returns>
406+
public static DateTime UtcMillisecondsToUtcDateTime(long utcTimestampMilliseconds)
407+
{
408+
return DateTimeOffset.FromUnixTimeMilliseconds(utcTimestampMilliseconds).UtcDateTime;
409+
}
410+
332411
/// <summary>
333412
/// UTC 时间戳 转换成本地时间
334413
/// </summary>
@@ -339,6 +418,16 @@ public static DateTime UtcToLocalDateTime(long utcTimestamp)
339418
return DateTimeOffset.FromUnixTimeSeconds(utcTimestamp).LocalDateTime;
340419
}
341420

421+
/// <summary>
422+
/// UTC 毫秒时间戳 转换成本地时间
423+
/// </summary>
424+
/// <param name="utcTimestampMilliseconds">UTC时间戳,单位毫秒</param>
425+
/// <returns>转换后的本地时间。</returns>
426+
public static DateTime UtcMillisecondsToDateTime(long utcTimestampMilliseconds)
427+
{
428+
return DateTimeOffset.FromUnixTimeMilliseconds(utcTimestampMilliseconds).LocalDateTime;
429+
}
430+
342431
/// <summary>
343432
/// 按照UTC时间判断两个时间戳是否是同一天
344433
/// </summary>
@@ -661,42 +750,6 @@ public static long GetEndTimestampOfYear(DateTime date)
661750
return new DateTimeOffset(GetEndTimeOfYear(date)).ToUnixTimeSeconds();
662751
}
663752

664-
/// <summary>
665-
/// 获取两个时间之间的间隔天数
666-
/// </summary>
667-
/// <param name="startTime">开始时间</param>
668-
/// <param name="endTime">结束时间</param>
669-
/// <returns>间隔天数</returns>
670-
public static int GetDaysBetween(DateTime startTime, DateTime endTime)
671-
{
672-
return (int)(endTime.Date - startTime.Date).TotalDays;
673-
}
674-
675-
/// <summary>
676-
/// 获取两个UTC时间戳之间的间隔天数
677-
/// </summary>
678-
/// <param name="startTimestamp">开始时间戳(秒)</param>
679-
/// <param name="endTimestamp">结束时间戳(秒)</param>
680-
/// <returns>间隔天数</returns>
681-
public static int GetDaysBetween(long startTimestamp, long endTimestamp)
682-
{
683-
var startTime = UtcToUtcDateTime(startTimestamp);
684-
var endTime = UtcToUtcDateTime(endTimestamp);
685-
return GetDaysBetween(startTime, endTime);
686-
}
687-
688-
/// <summary>
689-
/// 获取两个本地时间戳之间的间隔天数
690-
/// </summary>
691-
/// <param name="startTimestamp">开始时间戳(秒)</param>
692-
/// <param name="endTimestamp">结束时间戳(秒)</param>
693-
/// <returns>间隔天数</returns>
694-
public static int GetLocalDaysBetween(long startTimestamp, long endTimestamp)
695-
{
696-
var startTime = UtcToLocalDateTime(startTimestamp);
697-
var endTime = UtcToLocalDateTime(endTimestamp);
698-
return GetDaysBetween(startTime, endTime);
699-
}
700753

701754
/// <summary>
702755
/// 获取指定时间是否在指定的时间范围内

Tests/GameFrameX.Tests/UnitTestTime.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void test_time_millis()
4242
{
4343
var time = new DateTime(2022, 1, 1, 12, 0, 0);
4444
var utc = false;
45-
var timeMillis = TimeHelper.TimeMillis(time, utc);
45+
var timeMillis = TimeHelper.TimeToMilliseconds(time, utc);
4646
var expectedTimeMillis = (long)(time - new DateTime(1970, 1, 1)).TotalMilliseconds;
4747
Assert.That(timeMillis, Is.EqualTo(expectedTimeMillis));
4848
}
@@ -52,7 +52,7 @@ public void test_millis_to_date_time()
5252
{
5353
var timeMillis = 1641024000000;
5454
var utc = true;
55-
var dateTime = TimeHelper.MillisToDateTime(timeMillis, utc);
55+
var dateTime = TimeHelper.MillisecondsTimeStampToDateTime(timeMillis, utc);
5656
var expectedDateTime = new DateTime(2022, 1, 1, 0, 0, 0, DateTimeKind.Utc);
5757
Assert.That(dateTime, Is.EqualTo(expectedDateTime));
5858
}

0 commit comments

Comments
 (0)