把握行业变革关键节点,12 月 19 日 - 20 日,AICon北京站即将重磅启幕! 了解详情
写点什么

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

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

关注

评论

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

Flow vs Jenkins 实操对比,如何将Java应用快速发布至ECS

阿里云云效

Java 阿里云 cicd 云原生 ECS

盖世无双之国产数据库风云榜-2022年02月

墨天轮

数据库 GaussDB TiDB 国产数据库

如何高效交付专有云?百度智能云有妙招

百度开发者中心

MySQL是怎么保证redo log和binlog是完整的?

华为云开发者联盟

MySQL Binlog Redo Log WAL机制 日志逻辑序列号

OpenHarmony移植:如何适配utils子系统之KV存储部件

华为云开发者联盟

LiteOS OpenHarmony utils KV存储部件

如何应对数千微服务组件带来的挑战?

云智慧AIOps社区

php 架构 微服务 微服务架构 运维

产品更新 | 云原生综合运维平台SchedulX V 0.2.0 已发布,支持部署服务至云服务器

星汉未来

用了区块链技术,破产清算办案更透明了!

CECBC

数字人民币 为经济添活力

CECBC

【网络安全】Agent内存马的自动分析与查杀

H

网络安全 WEB安全

阿里卖家 Flutter for Web 工程实践

阿里巴巴终端技术

flutter Web 客户端开发 ffw

全球首个开源车路协同数据集发布,促进学界业界跨界融合

百度开发者中心

保证业务高效运营 专有云虚拟网络是关键

百度开发者中心

MySQL是怎么保证redo log和binlog是完整的?

华为云开发者联盟

MySQL Binlog Redo Log WAL机制 日志逻辑序列号

如何基于 Agora Android SDK 在应用中实现视频通话?

RTE开发者社区

人工智能 android 音视频

云防火墙:防御企业上云“亿”点网络攻击

青云技术社区

大力发展区块链技术,做好数字经济“新基建”

CECBC

面试官:linux零拷贝的原理是什么?

CRMEB

Kaggle冠军解读:风电场短期风况预测任务方案

百度大脑

快上车!第十七届全国大学生智能汽车竞赛百度创意组来啦

百度大脑

博文干货|Apache InLong 使用 Apache Pulsar 创建数据入库

Apache Pulsar

开源 架构 云原生 Apache Pulsar apache 社区

解码北京冬奥沉浸式报道黑科技: 阿里云视频云「互动虚拟演播技术」

阿里云CloudImagine

阿里云 计算机视觉 音视频 视频云 冬奥会

燃气表场景物联解决方案

😌

IoT 燃气

回声嘹亮 之 Go 的 Echo 框架 —— 上手初体验

宇宙之一粟

Go web Go 语言 2月月更

【Python】第三章(string)

謓泽

Python 2月月更

Python代码阅读(第76篇):摄氏温度与华氏温度互转

Felix

Python 编程 阅读代码 Python初学者

容器化 | 在 KubeSphere 中部署 MySQL 集群

RadonDB

MySQL 数据库 高可用 RadonDB KubeSphere

频繁项集挖掘算法在告警关联中的应用

云智慧AIOps社区

算法 告警

腾讯WeTest开通微信视频号啦

WeTest

| 从DevOps到BizDevOps, 研发效能提升的系统方法

阿里云云效

云计算 阿里云 DevOps 云原生 研发

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