📅  最后修改于: 2023-12-03 15:13:52.446000             🧑  作者: Mango
Unix时间戳是表示自1970年1月1日UTC(协调世界时)起经过的秒数。C#中可以使用标准库的DateTimeOffset
结构和TimeZoneInfo
类来计算Unix时间戳以及时区之间的转换。
DateTimeOffset now = DateTimeOffset.UtcNow;
long unixTimeStamp = (long)now.ToUnixTimeSeconds();
Console.WriteLine(unixTimeStamp);
使用DateTimeOffset.UtcNow
可以获取当前UTC时间,然后使用ToUnixTimeSeconds()
方法获取该时间的Unix时间戳。以上片段输出结果应为当前Unix时间戳。
DateTimeOffset
对象long unixTimeStamp = 1633311637;
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(unixTimeStamp);
Console.WriteLine(dateTimeOffset);
使用DateTimeOffset.FromUnixTimeSeconds(unixTimeStamp)
可以将Unix时间戳转换为本地时间的DateTimeOffset
对象。以上片段输出结果应为Unix时间戳对应的本地时间。
DateTimeOffset
对象转换为Unix时间戳DateTimeOffset dateTimeOffset = new DateTimeOffset(2021, 10, 4, 8, 0, 0, TimeSpan.FromHours(8));
long unixTimeStamp = (long)dateTimeOffset.ToUnixTimeSeconds();
Console.WriteLine(unixTimeStamp);
使用dateTimeOffset.ToUnixTimeSeconds()
可以将DateTimeOffset
对象转换为Unix时间戳。以上片段输出结果应为2021-10-04T00:00:00+00:00
对应的Unix时间戳。需要注意的是,ToUnixTimeSeconds()
方法返回的是UTC时间对应的Unix时间戳,因此如果dateTimeOffset
对象表示的是本地时间,需要先将其转换为UTC时间再调用ToUnixTimeSeconds()
方法。
DateTimeOffset localTime = new DateTimeOffset(2021, 10, 4, 8, 0, 0, TimeSpan.FromHours(8));
TimeZoneInfo targetTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTimeOffset targetTime = TimeZoneInfo.ConvertTime(localTime, targetTimeZone);
Console.WriteLine(targetTime);
使用TimeZoneInfo.FindSystemTimeZoneById()
方法可以通过时区名称获取TimeZoneInfo
对象,使用TimeZoneInfo.ConvertTime()
方法可以将本地时间转换为目标时区的时间。以上片段输出结果应为当前本地时间在美国东部时区对应的时间。
long unixTimeStamp = 1633311637;
DateTimeOffset utcTime = DateTimeOffset.FromUnixTimeSeconds(unixTimeStamp);
TimeZoneInfo targetTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTimeOffset targetTime = TimeZoneInfo.ConvertTime(utcTime, targetTimeZone);
Console.WriteLine(targetTime);
使用DateTimeOffset.FromUnixTimeSeconds()
方法可以将Unix时间戳转换为UTC时间,然后使用TimeZoneInfo.ConvertTime()
方法可以将UTC时间转换为目标时区的时间。以上片段输出结果应为Unix时间戳对应的时间在美国东部时区的表示。