c#将UTC转换为EDT

本文关键字:EDT 转换 UTC | 更新日期: 2023-09-27 18:26:26

我知道这方面有很多问题,但我仍然很困惑!

如何从UTC转换为EDT。即去美国东部时间(特别是纽约),但有夏令时?

我正在尝试这个:

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;
        }

感谢

c#将UTC转换为EDT

我怀疑您的UnixTimeStampToDateTime方法不正确。假设它从Unix epoch开始花费了秒数,它应该返回一个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值。使用以上内容应该很好,而且通常更有用。需要系统本地值的任何现有调用都应在UnixTimeStampToDateTime的结果上调用ToLocalTime

(或者,使用我的Noda Time项目,在那里你可以使用Instant.FromSecondsSinceUnixEpoch来获得Instant,然后做任何你想做的事情…)