【发布时间】:2020-04-01 06:52:10
【问题描述】:
我有日期时间(yyyy-MM-ddTHH:mm:ss)、时区偏移值(K 即 -/+HH:mm)和国家名称,并希望在我的 Web API 中从这些值中获取 IANA 格式的 ZoneId。
例如:
public static string FetchZoneID(string dateTime, string offset, string countryName)
{
//fetch zoneID
return zoneId;
}
价值观
dateTime = "2020-02-06T06:11:01", offset = "+13:00", countryName = "New Zealand"
我应该得到
zoneId = "Pacific/Auckland"
对于价值观
dateTime = "2020-05-06T06:11:01", offset = "+12:00", countryName = "New Zealand"
我应该得到(由于 DST)
zoneId = "Pacific/Auckland"
目前使用 NodaTime,我能够获取特定国家/地区的所有 zoneId,但无法弄清楚如何根据日期时间和偏移值过滤这些。
var zoneIds = TzdbDateTimeZoneSource.Default.ZoneLocations.Where(x => x.CountryName == countryName)
.Select(x => x.ZoneId);
有人可以帮我解决这个问题吗?
注意:如果多个 zoneId 符合给定偏移量的条件,将使用第一个值。
【问题讨论】:
-
为什么?可能有 10 个城市具有相同的偏移量,那么您为什么认为应该选择布里斯班?
-
我不介意为给定的输入获取多个 zoneId
-
我的意思是它不是唯一的。 ZoneLocation 值未内置到网络库中,应用程序必须设置参数。
-
更新了我的示例以避免混淆
-
请注意,
America/Detroit和America/New_York几乎总是具有相同的偏移量,但它们是同一国家/地区的两个不同时区。你想得到哪一个?另一个例子是Asia/Shanghai和Asia/Hong_Kong。
标签: c# datetime asp.net-core timezone nodatime