如何从unix历元时间转换并在C#中考虑夏令时?
我有一个函数,可以将unix历元时间转换为.NET日期时间值:如何从unix历元时间转换并在C#中考虑夏令时?,c#,datetime,timezone,C#,Datetime,Timezone,我有一个函数,可以将unix历元时间转换为.NET日期时间值: public static DateTime FromUnixEpochTime(double unixTime ) { DateTime d = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); return d.AddSeconds(unixTime); } 在我所在的地方(英国),夏季时钟向前拨一小时 在Python中,我使用time.time()获取本地历元时
public static DateTime FromUnixEpochTime(double unixTime )
{
DateTime d = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return d.AddSeconds(unixTime);
}
在我所在的地方(英国),夏季时钟向前拨一小时
在Python中,我使用time.time()
获取本地历元时间(为了论证,现在的时间是17:15:00),这给了我一个值1286122500
如果我使用time.localtime()
将其转换回人类可读的时间,它会像我预期的那样转换回17:15
如何将unix历元时间转换回.NET
DateTime
值,并考虑本地夏令时。我上面的函数将1286122500
转换回16:15,这与我的地理位置不符。您的夏令时即将结束吗?如果是这样的话,你的时区文件可能已经过时了,以为它已经结束了。(我不知道英国的情况,但在美国,夏令时的范围在3年前就扩大了,许多装置仍然没有更新的数据。)
简而言之,请确保您的时区数据是最新的。:-) 英国夏令时(英国夏令时)时区1286122500的时间是17:15 您的函数使用
DateTimeKind.Utc
,它告诉您使用Utc(也称为GMT),因此您可以获得GMT:16:15的时间。此外,我不认为更改unix epoch引用的时区会正确地影响您当前的本地时区
相反,您可以尝试以下方法:
DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
DateTime d = unixEpoch + new TimeSpan(unixTime);
(然后转换为
DateTimeKind.Local
)使用DateTime.ToLocalTime()
这门课非常擅长帮助学生处理不同的时间和时区。它使用Windows内置的时区信息在不同的时区之间进行转换
以下是如何使用它解决问题:
//Get your unix epoch time into a DateTime object
DateTime unixTime =
new DateTime(1970,1,1,0,0,0, DateTimeKind.Utc).AddSeconds(1286122500);
//Convert to local time
DateTime localTime = TimeZoneInfo.ConvertTime(unixTime, TimeZoneInfo.Local);
返回表示本地时区的时区信息。Ah-ha…我在DateTime构造函数中尝试了DateTimeKind.local
,真不敢相信我错过了.ToLocalTime()
方法。
//Get your unix epoch time into a DateTime object
DateTime unixTime =
new DateTime(1970,1,1,0,0,0, DateTimeKind.Utc).AddSeconds(1286122500);
//Convert to local time
DateTime localTime = TimeZoneInfo.ConvertTime(unixTime, TimeZoneInfo.Local);