有没有利弊乔达时间?

我想说服build筑经理在我们的产品中joinJoda-Timejar。

你知道使用它的缺点吗?

我认为Joda-Time需要不断更新,因为它包含的文件。 这是一个缺点。 也许我错了。

你能提供一些关于这个问题的清晰吗?

我对乔达时代几乎有完全积极的经验。 我的一个问题是当试图构build我自己的时区(出于正当的理由,我向你保证:)我有一些非常奇怪的例外,并且文档对于特定的用例不是很好。

然而,大多数情况下,使用它是一种乐趣 – 不变性使得代码更容易推理,而格式化程序的线程安全性非常有用。

是的,有些文件需要更新 – 但至less可以让它们保持最新状态。 这并不像是包含了Java内置东西所不必要的东西,只是使用Java的机制,你不能像时区一样保持最新的信息,而不会造成太大的麻烦!

基本上,使用乔达时间+1。 Javadate/时间API是Java平台IMO中最差的一个。

在我看来,Joda-Time最重要的缺点是关于精度:许多数据库存储精度为微秒 (甚至纳秒 )的时间戳。 乔达时间只有几毫秒 。 这是我不能接受的:我使用的所有“数据模型”类都需要反映数据库中数据的完整精度。 我的数据库的近似或截断只是不削减它。

以下是从JSR 310邮件列表中select毫秒精度的原因:

“Joda-Timeselect使用毫秒,因为它使date和日历的转换更容易。” – S. Colebourne

更容易为谁? 图书馆的作者,人们会认为……在我看来,当几乎所有的数据库存储时间达到微秒/纳秒的精度时,错误的devise决策。 无视数据库值是令人担忧的。

我们在使用Joda Time时遇到的最大问题是与Spring和Tapestry的集成,因为他们都想使用内置的date和时间。 我们不断地在getter / setter中为date和时间编写包装:或者我们将它存储为Joda Time,一组getter / setter传递它,另一组将会dynamic转换,并且一些类在内部将其存储为Javadate/时间,而Joda getter / setter不得不随时切换。

基本上,这是一个令人头疼的问题,因为这些类的命名是相同的,除非你可以让整个架构(包括你正在集成的其他库)转换到Joda Time,否则你会写更多的包装代码通过使用Joda库。

Parleys主持了Stephen Colebourne关于JSR-310的演讲 ,Joda-Time和JSR-310的作者Colebourne先生。 他首先解释了Java中标准date/时间支持的缺点,以及为什么要使用替代方法。 将这个演示文稿展示给你的架构经理可能会有帮助。 我似乎无法深入联系

Joda-Time之所以更新其时区文件的原因是因为时区数据经常在短时间内变化(如今在2008-12-31添加了闰秒 ),并不总是具有科学动机(例如,我记得一些太平洋岛屿国家将其时区改为2000年进入的第一个国家)。

过去,我遇到过不想join第三方开源软件的公司,或者至less要求公司律师certificate许可证不会让他们承担任何责任或者有病毒影响他们的产品。

与任何第三方库一样,您可能应该将其放入源代码控制中,以便在出现问题时find随代码的特定版本提供的版本。

毫秒级的底层时间连续体的select对于实现古代日历和特殊的日历是很好的。 与许多计数器不同的是,64位毫秒计数器对古代日历具有良好的范围覆盖,翻转性能超过+/- 2.6亿年。

它不处理闰秒。 这是一件好事。 primefaces钟人员提出了一个平滑的过渡,以允许不部署闰秒的系统增量地调整其时钟超过100秒,以适应闰秒修正。

维护时区表也是一个问题。

基础的连续统一体还允许一个古老的法国日历和时钟,将一天分成10个称为公制时间的时间间隔,而不是24小时。 中国传统的日历将每天分为100次,每次只有14分钟。 所有这些日历都可以在基础的毫秒时间连续性上实现和协调。

与它的主要问题是供应商locking,至less在它成为标准的一部分。

大多数情况下,我会使用longs在数据库上存储任何商业date信息。 这使我可以灵活地调整我认为合适的精度。 在大多数情况下,我只是将它们转换为java.util.Date。

时区我会认为是一个演示级别的问题,而不是数据问题。 这简化了数据库并提高了可移植性,因为数据库可以用不同的方式表示时间。

标准的Calendar类为我提供了一些date操作函数,我将它们转换为从时代数据开始的毫秒数。

至于纳秒精度,我会把它作为一个偏移量从0作为一个单独的长列存储。