UTC DateTime转换为美国东部



我对UTC感到困惑,在任何地方都找不到任何东西。

我的GMT时间为00:00:00

我想为美国东部标准时间转换为UTC时间。

我将04:00:00-04作为UTC字符串。

这是我的代码。

string UTCDateTime;
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time")
DateTime dateTimeOld = new DateTime(2017,09,11,0,0,0);
DateTime dateTime = TimeZoneInfo.ConvertTimeToUtc(dateTimeOld, timeZone);
UTCDateTime = dateTime.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss");
var offset = timeZone.GetUtcOffset(dateTime);
UTCDateTime += ((offset < TimeSpan.Zero) ? "-" : "+") + offset.ToString("hh");'

所以我的输出将是一个UTC字符串:" 2017-09-11 04:00:00-04"。

是正确的吗?应该不是" 2017-09-11 00:00:00-04"

使用DateTimeOffset处理此用例。

// The source time in UTC
DateTimeOffset utc = new DateTimeOffset(2017, 9, 11, 0, 0, 0, TimeSpan.Zero);
// The time zone for the Eastern US
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
// The converted time in the time zone
DateTimeOffset eastern = TimeZoneInfo.ConvertTime(utc, timeZone);
// output in a usable format
Console.WriteLine(eastern.ToString("yyyy-MM-dd HH:mm:ss zzz"));
//=>  2017-09-10 20:00:00 -04:00

一些注释:

    在这种情况下,
  • GMT和UTC表示相同的事情。说您有GMT,想要UTC是荒谬的。如果您是指特定格式的字符串,请描述格式。UTC不是字符串格式。

  • "US Eastern Standard Time"条目仅应在印第安纳州的某些地区使用。美国大多数东部时区以"Eastern Standard Time"条目表示。如果您有兴趣,请参阅印第安纳州的时间以获取更多详细信息。

  • 不要以为所有时区都只有数小时的抵销。许多也被抵消30或45分钟。如果您使用任何一个时区,则仅显示小时可能会导致数据错误。

  • 避免调用ToUniversalTime,除非源数据确实在计算机的本地时区域。

  • 注意输出。您的代码或假设都不正确。美国东部是四个小时 utc。因此,当是午夜UTC时,在美国东部时间的前一天是20:00(或8:00 pm)。

您的dateTimeold是est。

的午夜

然后,您使用时区将其转换为UTC并放入DateTime。

由于UTC比EST提前4小时,这意味着DateTime现在使用DateTimeKind.utc。

04:00

您然后在分配中再次将其转换为UTCDATETIME。但是由于已经是UTC(从您以前的转换来看),这无济于事。因此,它将将2017-09-11 04:00:00放入字符串UTCDATETIME。

您然后添加时区信息中的时区偏移量 - 这是没有意义的。时区与本地时间关联 - 是DateTimeOld。通过转换为UTC,您特别摆脱了时区偏移。

因此,要么初始化datetimeold的字符串,然后添加时区偏移 - 这将给出:2017-09-11 00:00:00-04

或直接使用" Z"后缀直接在DateTime中使用UTC时间来指示UTC(Zulu Time),因此您可以获得2017-09-11 04:00:00z

这两个都表示同一时间(除非我复制了错误的东西):)

通常,在处理日期时,共同的约定是将数据尽快转换为UTC并在整个程序中保留UTC,然后在显示数据时转换为当地时间。但是您也可以选择使用dateTimeOffset - 它可以不同,与DateTime不同,可以在多个时区存储本地时间。

相关内容

  • 没有找到相关文章

最新更新