在时区获取当前时间并没有考虑夏令时(我认为)
Getting the current time in a timezone isn't taking into account daylight savings (I think)
我正在尝试使用 NodaTime 获取时区列表的当前时间。但是,我遇到了 "EST" 时区的问题。据我所知,它非常适合在许多其他时区获取时间,但 "EST" 似乎不正确。
目前(截至目前)Google 告诉我 EST 是 18:40。有没有一种方法可以解决这个问题(需要一个更好的词),以便我能够根据当前的 UTC 时间获得给定时区的 当地时间 ?
void Main()
{
var timeZones = new List<string>()
{
"Africa/Abidjan",
"Africa/Bangui",
"Africa/Casablanca",
"Africa/Johannesburg",
"America/Guayaquil",
"America/New_York",
"America/Vancouver",
"America/Montreal",
"Europe/Lisbon",
"Europe/London",
"EST"
};
GetLocalTimes(timeZones).Dump();
//Africa/Abidjan 05/05/2019 22:40:22
//Africa/Bangui 05/05/2019 23:40:22
//Africa/Casablanca 05/05/2019 22:40:22
//Africa/Johannesburg 06/05/2019 00:40:22
//America/Guayaquil 05/05/2019 17:40:22
//America/New_York 05/05/2019 18:40:22
//America/Vancouver 05/05/2019 15:40:22
//America/Montreal 05/05/2019 18:40:22
//Europe/Lisbon 05/05/2019 23:40:22
//Europe/London 05/05/2019 23:40:22
//EST 05/05/2019 17:40:22
}
public IReadOnlyDictionary<string, DateTime> GetLocalTimes(IEnumerable<string> timeZones)
{
var dictionary = new Dictionary<string, DateTime>();
foreach (var timeZone in timeZones)
{
var utcDateTime = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc);
var zonedDateTime = Instant.FromDateTimeUtc(utcDateTime).InZone(DateTimeZoneProviders.Tzdb[timeZone]).ToDateTimeUnspecified();
dictionary.Add(timeZone, zonedDateTime);
}
return dictionary;
}
这不是 NodaTime 问题,而是时区混淆。 EST 不会因夏令时而改变。那些遵守夏令时的地方更改为 EDT,这是一个小时的差异。基本上 EST 和 EDT 是跟踪东部时区 (ET) 时间的两种方式。
https://en.wikipedia.org/wiki/Eastern_Time_Zone
请尝试使用 America/New_York
。
我正在尝试使用 NodaTime 获取时区列表的当前时间。但是,我遇到了 "EST" 时区的问题。据我所知,它非常适合在许多其他时区获取时间,但 "EST" 似乎不正确。
目前(截至目前)Google 告诉我 EST 是 18:40。有没有一种方法可以解决这个问题(需要一个更好的词),以便我能够根据当前的 UTC 时间获得给定时区的 当地时间 ?
void Main()
{
var timeZones = new List<string>()
{
"Africa/Abidjan",
"Africa/Bangui",
"Africa/Casablanca",
"Africa/Johannesburg",
"America/Guayaquil",
"America/New_York",
"America/Vancouver",
"America/Montreal",
"Europe/Lisbon",
"Europe/London",
"EST"
};
GetLocalTimes(timeZones).Dump();
//Africa/Abidjan 05/05/2019 22:40:22
//Africa/Bangui 05/05/2019 23:40:22
//Africa/Casablanca 05/05/2019 22:40:22
//Africa/Johannesburg 06/05/2019 00:40:22
//America/Guayaquil 05/05/2019 17:40:22
//America/New_York 05/05/2019 18:40:22
//America/Vancouver 05/05/2019 15:40:22
//America/Montreal 05/05/2019 18:40:22
//Europe/Lisbon 05/05/2019 23:40:22
//Europe/London 05/05/2019 23:40:22
//EST 05/05/2019 17:40:22
}
public IReadOnlyDictionary<string, DateTime> GetLocalTimes(IEnumerable<string> timeZones)
{
var dictionary = new Dictionary<string, DateTime>();
foreach (var timeZone in timeZones)
{
var utcDateTime = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc);
var zonedDateTime = Instant.FromDateTimeUtc(utcDateTime).InZone(DateTimeZoneProviders.Tzdb[timeZone]).ToDateTimeUnspecified();
dictionary.Add(timeZone, zonedDateTime);
}
return dictionary;
}
这不是 NodaTime 问题,而是时区混淆。 EST 不会因夏令时而改变。那些遵守夏令时的地方更改为 EDT,这是一个小时的差异。基本上 EST 和 EDT 是跟踪东部时区 (ET) 时间的两种方式。
https://en.wikipedia.org/wiki/Eastern_Time_Zone
请尝试使用 America/New_York
。