NodaTime更新手册tz db

时间:2016-09-01 11:04:53

标签: nodatime

有一节“使用NodaZoneData文件”,介绍如何从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 lib,并将tzdb数据更新为nuget?

由于

1 个答案:

答案 0 :(得分:4)

  

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

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

如果你想拥有自己的应用程序范围默认值,我建议你创建一个自己的类,其中包含一个暴露IDateTimeZoneProvider或者单例的静态属性。除非您引用DateTimeZoneProviders.Tzdb,否则请参阅。

在保持最新状态方面:

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

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