如何在C#中将unix纪元时间和帐户转换为夏令时?

Kev*_*Kev 11 c# timezone datetime

我有一个从unix纪元时间转换为.NET DateTime值的函数:

public static DateTime FromUnixEpochTime(double unixTime )
{
  DateTime d = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
  return d.AddSeconds(unixTime);
}
Run Code Online (Sandbox Code Playgroud)

我在哪里(英国),时钟在夏季时间前进一小时.

在Python中我使用time.time()(并且为了参数,现在时间是17:15:00)获得本地大纪元时间,这给了我一个值1286122500.

如果我将time.localtime()它转换回人类可读时间,使用它可以像我期望的那样转换回17:15.

如何将unix纪元时间转换回.NET DateTime值和帐户以获取当地夏令时.我上面的函数转换1286122500回16:15,这对我的地理位置不正确.

Dan*_*tru 21

用途DateTime.ToLocalTime():

http://msdn.microsoft.com/en-us/library/system.datetime.tolocaltime.aspx

public static DateTime FromUnixEpochTime(double unixTime)
{
    DateTime d = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    d = d.AddSeconds(unixTime);
    return d.ToLocalTime();
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*ers 5

的TimeZoneInfo类是在帮助一个处理不同的时间和时区很大.它使用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);
Run Code Online (Sandbox Code Playgroud)

TimeZoneInfo.Local返回表示本地时区的TimeZoneInfo.