我知道有很多问题,但我仍然感到困惑!
如何从UTC转换为EDT。即到EST(特别是纽约),但有夏令时?
我正在尝试这个:
TimeZoneInfo edtZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime utcDT = UnixTimeStampToDateTime(double.Parse(fields[0]));
utcDT.Kind = DateTimeKind.Utc; //THIS LINE IS WRONG
DateTime edtDT = TimeZoneInfo.ConvertTimeFromUtc(utcDT, edtZone);
//Put in for as requested
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
{
// Unix timestamp is seconds past epoch
System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).ToLocalTime();
return dtDateTime;
}
由于
答案 0 :(得分:3)
我怀疑您的UnixTimeStampToDateTime
方法不正确。假设它占用了自Unix纪元以来的秒数,应返回DateTime
已Kind
Utc
,例如。
private static readonly DateTime UnixEpoch =
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
public static DateTime UnixTimeStampToDateTime(double secondsSinceUnixEpoch)
{
return UnixEpoch.AddSeconds(secondsSinceUnixEpoch);
}
编辑:现在我们可以看到现有的实施 - 是的,这是不合适的。您没有理由要创建Unspecified
值,然后将其转换为Local
值。使用上面应该没问题,一般来说更有用。任何需要系统本地值的现有调用都应在ToLocalTime
的结果上调用UnixTimeStampToDateTime
。
(或者,使用我的Noda Time项目,您可以使用Instant.FromSecondsSinceUnixEpoch
获取Instant
,然后随意做任何事情......)