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;
}
感谢
我怀疑您的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
,然后做任何你想做的事情…)