NodaTime更新手册tz db

Man*_*zas 1 nodatime

关于如何包括和加载NodaZoneData文件中的tz数据,有一个“使用NodaZoneData文件”部分。

代码部分显示以下内容

    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);
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Jon*_*eet 5

如何将创建的提供程序设置为NodaTime库,以将其用作默认值?

Noda Time中很少有东西使用任何提供程序作为默认值。(类似地,默认情况下,我们不使用系统时区,而是尝试避免隐式使用当前区域性(除了兼容性)。)在当前的2.0源代码中,唯一的引用位于ClockExtensionsDateTimeZoneProviders.Serialization(XML使用)和二进制序列化,并且可以在应用程序代码中设置)。

如果您想拥有自己的应用程序范围内的默认值,建议您使用静态属性创建一个自己的类,该属性暴露一个IDateTimeZoneProvider或一个单例。请在其他地方引用DateTimeZoneProviders.Tzdb

在保持最新状态方面:

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

没有一个选项易于实现,还有许多其他的Noda Time工作要做(使用docfx重新实现网站,使用BenchmarkDotNet安排基准测试并在网站上公开该数据,当然还要完成2.0代码库) 。我们会尽力而为的,但请不要屏息,因为它是Real Soon Now。