c#将UTC转换为EDT

时间:2013-08-05 15:07:06

标签: c# datetime utc

我知道有很多问题,但我仍然感到困惑!

如何从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;
        }

由于

1 个答案:

答案 0 :(得分:3)

我怀疑您的UnixTimeStampToDateTime方法不正确。假设它占用了自Unix纪元以来的秒数,返回DateTimeKind 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,然后随意做任何事情......)