Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从unix历元时间转换并在C#中考虑夏令时?_C#_Datetime_Timezone - Fatal编程技术网

如何从unix历元时间转换并在C#中考虑夏令时?

如何从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()获取本地历元时

我有一个函数,可以将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()
获取本地历元时间(为了论证,现在的时间是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);