写点什么

可移植类库(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:281458
用户头像

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

关注

评论

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

【LeetCode】叶子相似的树Java题解

Albert

算法 LeetCode 5月日更

毕业前写了20万行代码,让我从成为同学眼里的面霸!

小傅哥

Java 面试 小傅哥 求职 毕业生

图算法系列之计算图中最短路径

Silently9527

数据结构和算法 图算法 广度优先搜素

怎样使用过程自动化来实现过程的习惯性和持久性?

IPD产品研发管理

自动化 开发 CMMI

想要做网页游戏怎么办 ?PixiJs 篇(三)

空城机

大前端 游戏 pixi 5月日更

密码学系列之:NIST和SHA算法

程序那些事

数据结构 密码学 程序那些事

Nginx基础配置-资源缓存配置

梁龙先森

nginx 大前端 缓存;

秘笈分享! 24 小时无人自习室为什么这么火?

IoT云工坊

小程序 人工智能 物联网 无人自习室

414天前,我以为这是编程玄学...

why技术

Java JVM JMM

读完你就知道对话式人工智能的数据采集如何解决啦!

澳鹏Appen

人工智能 自然语言处理 聊天机器人 nlp nlu

缓存系统稳定性 - 架构师峰会演讲实录

万俊峰Kevin

缓存 微服务 分布式缓存 Go 语言

关于中台,聊聊我认为相对客观的三点认知

架构精进之路

中台 5月日更

消息队列设计文档

青春不可负,生活不可欺

演讲稿:项目的架构设计与模块规划

三掌柜

5月日更

消息队列架构详细设计文档

唐江

架构实战营

函数和对象的关系

顿晓

5月日更

架构实战营模块三作业

hunk

架构实战营

用Python帮忙找指定小说最新更新且网速最快的网站

老猿Python

Python 爬虫 编程语言 百度搜索 小说更新

消息队列 - 架构设计文档

sN0wpeak

架构实战营

模块三:课后作业

菲尼克斯

架构实战营

个站建立基础教程

Damon

网站 5月日更

STM32如何计算RTC时钟异步预分频和同步预分频

不脱发的程序猿

嵌入式 RTC stm32 单片机 ST

架构实战营模块 3 作业

梦寻解语花

架构实战营

架构实战营-模块3作业

大师兄

C语言0数组\柔性数组使用介绍

良知犹存

c

打破思维定式(五)

Changing Lin

5月日更

百度大脑开放日厦门站-企业服务专场报名

百度大脑

百度大脑 开放日 企业服务

Python OOP-4

若尘

面向对象 oop Python编程 5月日更

STM32F103C8/BT6最小系统原理图、PCB

不脱发的程序猿

嵌入式 单片机 STM32F103C8T6 MCU ST

架构实战营 模块3 课后作业

༺NPE༻

优柔寡断的人,能成什么大事

Kareza

个人成长 5月日更 反思总结

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