BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

可移植类库(Portable Class Library)已支持Noda Time

| 作者 Jonathan Allen 关注 612 他的粉丝 ,译者 李彬 关注 1 他的粉丝 发布于 2013年4月19日. 估计阅读时间: 3 分钟 | ArchSummit北京2018 共同探讨机器学习、信息安全、微服务治理的关键点

Noda Time是用于.NET的高级日期/时间库,其最新版本适用于Windows 8、Windows Phone 7和Windows Phone 8。该版本还提供了NuGet包和全面的用户指南

Noda Time将类型系统分为两类,即本地类型与全球类型。

本地类型不会绑定到任何时区,但可能会包含一个日历组件。这与DateTimeKind被设置Unspecified的DateTime类相似。此外,Noda Time还支持只有时间或只有日期的值。

全球类型基于Instant的概念。一个Instant是通用时间系统中的某个特定时刻。为了与其他系统兼容,它以时间片(tick)为单位,从世界标准时间1970年1月1日(Unix纪元)开始计算,这里每毫秒被划分为1万个时间片,从而能够支持非常高的精度。但应该指出的是,某些科学仪器能够以小到10-18秒的时间片来测量时间。

诸如ZonedDateTime等类会将Instant与时区信息结合起来。与DateTimeOffset不同,ZonedDateTime包含了需要显示给用户的实际时区信息。

下面这幅来自其文档的转换图展现了这些核心类型是如何关联的:

与BCL相比,Noda Time的另一个优势是对历史日期的支持。BCL的DateTime类表示的最小值是公元元年。Noda Time则支持表示到大约公元前27000年,可以用于应用中对古埃及和中国的年表进行的比较。

Noda Time同时支持Windows和Olson时区数据库。由于各国政府经常会修改时区相关的法律,因此Noda Time允许开发者加入较新版本的数据库。

在Noda Time中,Period和Duration有着不同的含义。Duration表示一段固定长度的时间,可用时间片进行计量。而Period则是抽象的概念,例如“一个月”或“两周”。“由Period表示的时间流逝的总量并不是固定的:始于1月1日的‘一个月’,实际上比从2月1日开始的‘一个月’要长,因为2月总是比1月短。”

在面向Java的Joda Time的基础上,Noda Time是为了修正.NET日期/时间类中现存的许多问题而设计的。例如,它允许开发者直接表示日期而无需时间组件,从而避免不必要的时区转化将“12月10日零点”意外地变成“12月9日晚11点”这样的问题。

Noda Time提供了IClock接口以支持测试。它通过SystemClock和FakeClock实现。初始化之后就可以手动递增FakeClock,或为它设置固定步长的自动增量。

Noda Time基于Apache许可提供。

查看英文原文Portable Class Library Support for Noda Time


感谢臧秀涛对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT