这里我给出了我的代码以及发生了什么。
当我将时区id传递给.net时区时,其工作代码如下
var zoneId = "India Standard Time";
var zone = TimeZoneInfo.FindSystemTimeZoneById(zoneId);
var now = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, zone);
string xx1 = now.ToLongTimeString();
当我将相同的时区ID 印度标准时间传递给noda时间库时,我收到错误"时区印度标准时间未知来源TZDB:2014e(映射: 9723)"
我的代码如下noda时间
var zoneId = "India Standard Time";
DateTimeZone _zone = DateTimeZoneProviders.Tzdb[zoneId];
ZonedDateTime _now = SystemClock.Instance.Now.InZone(_zone);
string xx= now.ToLongTimeString();
告诉我如何将时区传递给noda库India Standard Time or GMT Standard Time
感谢
答案 0 :(得分:2)
如果您想将BCL时区传递给Noda Time,您只需要使用BCL提供商:
DateTimeZone _zone = DateTimeZoneProviders.Bcl[zoneId];
这将找到相关的TimeZoneInfo
,提取其调整规则,并将其转换为Noda Time表示。然后,您可以像使用其他任何DateTimeZone
一样使用它。
请注意,这些时区ID是特定于Windows的。如果您可以使用IANA(TZDB)时区ID,那通常会使您的数据更容易移植到其他系统。
答案 1 :(得分:1)
如错误消息所示,您提供的字符串不在tzdb(Olson数据库)中。有list of zones on Wikipedia:Indian Standard Time是“亚洲/加尔各答”。尝试将其作为区域字符串。
“Etc / GMT”是GMT的字符串,维基说这是时区字符串“UTC”的快捷方式。