写点什么

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

  • 2013-04-18
  • 本文字数:1062 字

    阅读完需:约 3 分钟

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 )关注我们,并与我们的编辑和其他读者朋友交流。

2013-04-18 09:281263
用户头像

发布了 256 篇内容, 共 68.3 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

甲方日常 18

句子

生活 随笔杂谈

提交项目到gitee报错Push to origin/master was rejected的解决办法

Geek_416be1

迷茫吗?来看这15个程序员的回答,比你搜集多少资料都有用

小Q

Java 程序员 架构 面试 职业规划

踩坑记 | 多aar下修改常量的一个小坑

哈利迪

android

【Nginx】冰河又一本超硬核Nginx PDF教程免费开源!!

冰河

nginx 冰河

拥抱K8S系列-08-通过rancher部署nginx应用

张无忌

nginx Kubernetes rancher

2020.09.14-2020.09.20学习总结

icydolphin

极客大学架构师训练营

期末大作业(一)

武鹏

架构师培训期末大作业

小蚂蚁

架构师训练营1期 -- 第一周总结

曾彪彪

极客大学架构师训练营

期末大作业

Geek_a327d3

训练营结束

dongge

架构师训练营期末大作业

jiangnanage

架构师训练营 - 大作业二

桔子

架构师训练营第1周学习总结

netspecial

极客大学架构师训练营

食堂就餐卡系统设计

icydolphin

极客大学架构师训练营

同城快递系统-系统顶层架构设计

纯纯

架构师训练营大作业

努力努力再努力m

机器学习在滴滴网络定位中的探索和实践

滴滴技术

人工智能 学习 滴滴技术

从 Java 中的零拷贝到五种IO模型

Rayjun

Java io

食堂就餐卡系统设计

Leo乐

极客大学架构师训练营

期末大作业(二)

武鹏

让冰城的温暖冬天,不再有“隐秘的角落”

脑极体

极客时间-架构师训练营 大作业

潜默闻雨

大作业:用思维导图画出训练营知识点

chenzt

架构训练营 - 第1周课后作业 - 学习总结

Pudding

我看过最长的图,是百度绘制的AI蓝图

脑极体

Atlassian 金融企业敏捷转型线上峰会剧透来袭!

Atlassian

项目管理 DevOps 敏捷 金融

大作业

李朋

架构师训练营 - 同城快递架构文档

陈皮

架构师训练营 - 第 1 周课后作业(1 期)

Pudding

可移植类库(Portable Class Library)已支持Noda Time_.NET_Jonathan Allen_InfoQ精选文章