如何将AI能力与大数据技术结合,助力数据分析治理等工作的效率大幅提升,优化大数据引擎的性能及成本? 了解详情
写点什么

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:521358
用户头像

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

关注

评论

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

可能一眼看不懂的几行Kotlin代码,程序员面试防坑宝典

android 程序员 移动开发

在中国程序员是青春饭吗?,在阿里工作5年了

android 程序员 移动开发

启动速度与执行效率优化项目实战(四),android开发入门与实战网盘

android 程序员 移动开发

国内大厂在移动端跨平台的框架接入分析,2021年一起努力应对互联网寒冬吧

android 程序员 移动开发

图文DEMO并茂讲解RecyclerView滑动时回收和复用触发的时机

android 程序员 移动开发

反思一次羞愧的阿里面试经历,致Android开发者

android 程序员 移动开发

反思|Android 事件拦截机制的设计与实现,android串口工具apk

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(四),flutter开源项目商业化

android 程序员 移动开发

因为不了解Android事件分发机制,居然被实习生嘲笑了,天呐

android 程序员 移动开发

可怕!RxHttp2,安卓开发基础

android 程序员 移动开发

哭了!失业半年-2020没有风口我也要跳槽,凭本事吃饭有技术到哪都是人才

android 程序员 移动开发

四张图让你玩转Tomcat系统架构!!!(1),android音频面试题

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(一),一线互联网公司面经总结

android 程序员 移动开发

听我慢慢道来Android-面试中的细节,三年老Android经验面经

android 程序员 移动开发

图片加载框架之图片加载框架选型(一)中篇,阿里P8大佬亲自教你

android 程序员 移动开发

另一种绕过-Android-P以上非公开API限制的办法,安卓多线程面试题

android 程序员 移动开发

只有这些东西?不,学习Android开发只要这些东西,想转行当程序员的必看

android 程序员 移动开发

[ CloudWeGo 微服务实践 - 05 ] 服务注册(2)

baiyutang

golang 微服务 11月日更

四月字节客户端面经,七月内推请找我,一文带你搞懂Android多线程Handler

android 程序员 移动开发

四面阿里,因为最后一个问题与offer失之交臂,android驱动开发

android 程序员 移动开发

linux之我常用的系统重要文件备份命令

入门小站

Linux

在线二进制转文本工具

入门小站

工具

史上最全Android性能优化总结,经典收藏,一口气拿了9家公司的offer

android 程序员 移动开发

图巨多,手把手教学Android-Studio超详细安装过程,kotlin菜鸟教程

android 程序员 移动开发

在Android中集成Flutter的学习笔记,flutter登录跳转

android 程序员 移动开发

只需四点,让你的面试百试百过!,android移动应用基础教程

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(三),4面字节跳动拿到Offer

android 程序员 移动开发

回眸重探锁机制,跨平台移动开发的特点

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(三)(1),面试Android岗

android 程序员 移动开发

四张图让你玩转Tomcat系统架构!!!,移动应用开发课程设计报告

android 程序员 移动开发

在-Kotlin-中使用-Dagger-会遇到的陷阱和优化方法,android开发实例大全PDF

android 程序员 移动开发

Jon Skeet谈Noda Time 1.0_.NET_Abel Avram_InfoQ精选文章