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库
感谢
如果您想将BCL时区传递给Noda time,您只需要使用BCL提供程序:
DateTimeZone _zone = DateTimeZoneProviders.Bcl[zoneId];
这将找到相关的TimeZoneInfo
,提取其调整规则,并将其转换为Noda Time表示。然后,您可以像使用任何其他DateTimeZone
一样使用它。
请注意,这些时区ID是特定于Windows的。如果您可以使用IANA(TZDB)时区ID,这通常会使您的数据更易于移植到其他系统。
正如错误消息所说,您提供的字符串不在tzdb(Olson数据库)中。维基百科上有一个区域列表:印度标准时间是"亚洲/加尔各答"。尝试将其作为你的区域字符串。
"Etc/GMT"是GMT的字符串,维基称其为时区字符串"UTC"的快捷方式。