NodaTime 更新手册 tz db

NodaTime update manual tz db

有一节 "Using a NodaZoneData file" 介绍了如何从 NodaZoneData 文件中包含和加载 tz 数据。

代码部分显示如下

    IDateTimeZoneProvider provider;
    // Or use Assembly.GetManifestResourceStream for an embedded file
    using (var stream = File.OpenRead("tzdb-2013h.nzd"))
    {
        var source = TzdbDateTimeZoneSource.FromStream(stream);
        provider = new DateTimeZoneCache(source);
    }
    Console.WriteLine(provider.SourceVersionId);

如何将创建的提供程序设置为 NodaTime 库,以便将其用作默认值? NodaTime 发布不遵循 tz 数据发布。将来会改变吗? 是否有另一种方法来获取更新的 NodaTime 库,并将 tzdb 数据更新为 nuget?

谢谢

How do you set the created provider to the NodaTime library in order to use it as a default?

Noda Time 很少使用 any 提供程序作为默认提供程序。 (同样,我们默认不使用系统时区,并尽量避免隐式使用当前文化,除非是为了兼容性。)查看当前 2.0 源代码,only引用在 ClockExtensionsDateTimeZoneProviders.Serialization 中(由 XML 和二进制序列化使用,可以在应用程序代码中设置)。

如果您想拥有自己的应用程序范围的默认设置,我建议您创建自己的 class 并使用静态 属性 公开 IDateTimeZoneProvider,或者可能是单例。在您要引用 DateTimeZoneProviders.Tzdb.

的任何地方引用它

在保持最新状态方面:

  • 每个新版本发布后,Noda Time 网站上都会很快发布一个新的 nzd 文件。您可以通过将包含 URL 的 http://nodatime.org/tzdb/latest.txt 提取到最新文件来检测到这一点。
  • 我们正在考虑有关如何发布 nuget 包的选项:
    • 有一个只包含数据的 nuget 包(可能还有少量 "bootstrapping" 代码),并从 NodaTime.dll
    • 中删除嵌入的数据
    • 拥有一个包含所有 TZDB 特定代码的 nuget 包,并从 NodaTime.dll
    • 中删除嵌入数据
    • 只需更改我们的发布惯例,以便可以将新的 NodaTime nuget 包与新文件同时推送

None 的选项很容易实现,还有很多其他 Noda Time 工作要做(用 docfx 重新实现网站,使用 BenchmarkDotNet 安排基准测试并在网站上公开该数据,当然还有完成 2.0 代码库)。我们会解决的,但不要屏住呼吸,因为它很快就会实现。