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

本文关键字:NodaTime 问题 时区 使用 | 更新日期: 2023-09-27 18:28:18

这里我给出了我的代码和发生的事情。

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

告诉我如何将时区传递到用于India Standard Time or GMT Standard Time 的noda库

感谢

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

如果您想将BCL时区传递给Noda time,您只需要使用BCL提供程序:

DateTimeZone _zone = DateTimeZoneProviders.Bcl[zoneId];

这将找到相关的TimeZoneInfo,提取其调整规则,并将其转换为Noda Time表示。然后,您可以像使用任何其他DateTimeZone一样使用它。

请注意,这些时区ID是特定于Windows的。如果您可以使用IANA(TZDB)时区ID,这通常会使您的数据更易于移植到其他系统。

正如错误消息所说,您提供的字符串不在tzdb(Olson数据库)中。维基百科上有一个区域列表:印度标准时间是"亚洲/加尔各答"。尝试将其作为你的区域字符串。

"Etc/GMT"是GMT的字符串,维基称其为时区字符串"UTC"的快捷方式。