NodaTime:使用NodaTime库c#的时区相关问题

时间:2014-10-29 09:33:20

标签: c# nodatime

这里我给出了我的代码以及发生了什么。

当我将时区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

感谢

2 个答案:

答案 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 WikipediaIndian Standard Time是“亚洲/加尔各答”。尝试将其作为区域字符串。

“Etc / GMT”是GMT的字符串,维基说这是时区字符串“UTC”的快捷方式。