📜  c# 获取 unix 时间跨度 - C# (1)

📅  最后修改于: 2023-12-03 15:13:52.446000             🧑  作者: Mango

C# 获取Unix时间跨度

Unix时间戳是表示自1970年1月1日UTC(协调世界时)起经过的秒数。C#中可以使用标准库的DateTimeOffset结构和TimeZoneInfo类来计算Unix时间戳以及时区之间的转换。

获取当前时间的Unix时间戳
DateTimeOffset now = DateTimeOffset.UtcNow;
long unixTimeStamp = (long)now.ToUnixTimeSeconds(); 
Console.WriteLine(unixTimeStamp);

使用DateTimeOffset.UtcNow可以获取当前UTC时间,然后使用ToUnixTimeSeconds()方法获取该时间的Unix时间戳。以上片段输出结果应为当前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()方法可以将本地时间转换为目标时区的时间。以上片段输出结果应为当前本地时间在美国东部时区对应的时间。

将Unix时间戳转换为其他时区的时间
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时间戳对应的时间在美国东部时区的表示。