写点什么

Jon Skeet 谈 Noda Time 1.0

  • 2012 年 11 月 21 日
  • 本文字数:1337 字

    阅读完需:约 4 分钟

Jon Skeet,Google 软件工程师,微软 C# MVP,最近发布了 Noda Time 1.0,这是流行的 Java 日期 / 时间库 Joda Time 的.NET 版本。

Noda Time 旨在修复.NET 日期/ 时间库中的缺陷,并降低使用复杂度。Noda Time 采用了一些关键的概念:Instant—从Unix 纪元开始计算的时刻;Partial—表示部分日期/ 时间;Interval—从一个毫秒时刻到另一个毫秒时刻的时间间隔;Duration—以毫秒为单位的时间间隔所持续的时间;Period—用字段表示的一段时间;Chronology—一个可插接的日历系统;Time Zone 根据 tz 数据库进行更新。

虽然将 Joda Time 移植到.NET 用了 3 年时间并且还有很多工作没有完成,但鉴于“在提供干净的 API(在强调该领域‘固有的’复杂性的同时降低了‘附带的’复杂性)方面,我们已经明显领先于我所见过的其他日期 / 时间 API”,Skeet 仍然对这个结果感到满意。

InfoQ 联系到了 Skeet,让他谈谈更多关于 Noda Time 的内容以及未来的计划。

InfoQ:Noda Time 1.0 提供了哪些.NET 4.5 没有的特性?

JS:基本上,BCL 中的类型十分有限——主要有两个类型(DateTime 和 DateTimeOffset)来表达你想表达的一个完整范围内的概念。Noda Time 具有更多的类型,可以帮助开发者将精力集中于他们真正操作的数据类型。我们故意将它涉及为受限的 API,可以防止你执行没有意义的操作。

关于我为什么不喜欢 BCL 中的时间 / 日期类型,可以看看我关于 DateTime 的博文

从根本上,我认为 API 在暴露功能时应该考虑以下四个目标:

  • 强迫用户做出某些决定(而不是隐藏该领域中重要的部分)
  • 当他们做出决定后,可以用干净的代码来表达这个决定,并在后台处理所有工作以实现这个决定
  • 尽可能地仅表达有意义的操作
  • 鼓励编写可测的代码

除了常规的日期时间 API,Noda Time 还提供了 TZDB/zoneinfo/Olson/IANA 时区信息的实现。

InfoQ:关于它的未来,你有什么计划?

JS:当然,这部分上取决于我们的用户。现在仍然有一些未完成的部分——我们希望能有更多的文本处理(起初可以先解析 ZonedDateTime 和 OffsetDateTime)和 PCL 支持。不同形式的序列化问题也不容回避——我们已经实验性地支持了一些 Json.NET(不在主程序集内),我还希望当 v1.0 中的主要概念全部正确的时候,我们可以增加对 XML 和二进制序列化的支持。

InfoQ:Noda Time 能在任何.NET 版本下工作吗?Mono 行吗?

JS:目前我们针对的是.NET 3.5+,并且仅限于桌面版。我们希望支持便携式类库(PCL,Protable Class Libraries),但工作量太大,对那些需要框架支持但 PCL 却不支持的特性,我们只能忍痛割爱。

代码在设计上是支持 Mono 的,并且我们尽可能地在 Mono 上进行了测试。但在 Mono 的稳定发布版本上,我们遇到了一些问题,大多数是关于区域和 TimeZoneInfo 的。但愿 Mono 3.0 能至少解决其中的一些问题。对于普通的计算方面的事宜,以及在使用 TZDB 的时候,Mono 都能工作得很好。当然,这些目标永远是不断变化的——我们会把更多的精力放在记录对于不同的操作系统和版本的组合,已经发现了哪些具体的问题。

查看英文原文 Jon Skeet on Noda Time 1.0


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

2012 年 11 月 21 日 05:521218
用户头像

发布了 59 篇内容, 共 19.5 次阅读, 收获喜欢 3 次。

关注

评论

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

区块链技术在医疗保健领域的应用展望

Geek_987812

医疗

寻找被遗忘的勇气(二十四)

Changing Lin

3月日更

Java泛型最全指南

xcbeyond

Java 泛型 3月日更

[译]用@WebMvcTest测试MVC Web Contorller

祝坤荣

spring unittest

分布式锁的实现方案

360技术

Redis - 缓存穿透、缓存击穿、缓存雪崩

insight

redis 3月日更

亚马逊云科技和德甲为 2021 赛季新推出三项赛况统计数据,强化实时比赛分析

亚马逊云科技 (Amazon Web Services)

一个SQL错误的问题让我找到了公司框架中三个bug

程序员小毕

Java MySQL 数据库 程序员 架构

看东鹏饮料如何从150亿条数据中洞察先机 | 精选案例

亚马逊云科技 (Amazon Web Services)

设计与思考,关于资源和生命周期

程序员架构进阶

设计实践 生命周期 28天写作 3月日更 池化技术

ProxmoxVE系列:上传系统镜像&&创建虚拟机

Bob

虚拟机 proxmoxve PVE

ProxmoxVE系列:Ubuntu服务器版系统安装

Bob

虚拟机 系统 proxmoxve PVE

员工离职的注意事项

石云升

离职 28天写作 职场经验 3月日更

C++ 中的 task based 并发

赖猫

c++ 后端 多线程 并发 服务器开发

数据结构队列

我是程序员小贱

3月日更

用 Redis 实现消息队列是一个好主意么?

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

多线程-基础

九洲城豪横团团长

如何革命社交媒体、实现去中心化?丝绸之路创始人在狱中提出了构想

Geek_987812

社交网络

ProxmoxVE 系列:如何巧妙的用Xshell连接Ubuntu server服务主机

Bob

虚拟机 系统 proxmoxve PVE

智能时代与华为路标:手机影像的文艺复兴史

脑极体

如何定义错误码

编号94530

Java 错误码 错误处理

数据去哪了?:从一次生产事故聊聊并发编程原子性问题

海拉鲁

Java 并发编程 多线程

Wireshark数据包分析学习笔记Day21

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

镜像仓库学习笔记

lenka

3月日更

C++ socket通讯详解及注意事项

赖猫

c++ 后台开发 后端 服务器开发

学习方法记录

风翱

学习方法 3月日更

第十二周作业

MR.X

apollo在Spring boot加载过程解析

程序员小毕

Java spring 开源 源码 程序员

在全面拥抱人工智能前,这 6 步您的公司做到了吗?| 云途专栏

亚马逊云科技 (Amazon Web Services)

NoCode 实战 | 零代码应用开发,轻松搞定任务跟踪管理难题(上)

亚马逊云科技 (Amazon Web Services)

深圳正探索利用区块链技术理念打造“数字政府“

Geek_987812

大数据

Flutter 自动化测试

Flutter 自动化测试

Jon Skeet谈Noda Time 1.0-InfoQ