快速业务通道

Joda-Time简介:既然无法摆脱时间,为何不设法简化时间处理? - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
ow.minusMonths(1).dayOfMonth().withMaximumValue();

您可能对清单 6 中的 dayOfMonth() 调用感兴趣。这在 Joda 中被称为属性(property)。它相当于 Java 对象的属性。属性是根据所表示的常见结构命名的,并且它被用于访问这个结构,用于完成计算目的。属性是实现 Joda 计算威力的关键。您目前所见到的所有 4 个 Joda 类都具有这样的属性。一些例子包括:

yearOfCentury dayOfYear monthOfYear dayOfMonth dayOfWeek

Joda-Time简介:既然无法摆脱时间,为何不设法简化时间处理?(7)

时间:2011-02-14 IBM J Steven Perry

我将详细介绍清单 6 中的示例,以向您展示整个计算过程。首先,我从当前月份减去一个月,得到 “上一个月”。接着,我要求获得 dayOfMonth 的最大值,它使我得到这个月的最后一天。注意,这些调用被连接到一起(注意 Joda ReadableInstant 子类是不可变的),这样您只需要捕捉调用链中最后一个方法的结果,从而获得整个计算的结果。

当计算的中间结果对我不重要时,我经常会使用这种计算模式。(我以相同的方式使用 JDK 的 BigDecimal)。假设您希望获得任何一年中的第 11 月的第一个星期二的日期,而这天必须是在这个月的第一个星期一之后。清单 7 展示了如何完成这个计算:

清单 7. 计算 11 月中第一个星期一之后的第一个星期二

LocalDate now = SystemFactory.getClock().getLocalDate(); LocalDate electionDate = now.monthOfYear()   .setCopy(11)    // November   .dayOfMonth()    // Access Day Of Month Property   .withMinimumValue() // Get its minimum value   .plusDays(6)    // Add 6 days   .dayOfWeek()    // Access Day Of Week Property   .setCopy("Monday") // Set to Monday (it will round down)   .plusDays(1);    // Gives us Tuesday 

清单 7 的注释帮助您了解代码如何获得结果。.setCopy("Monday") 是整个计算的关键。不管中间 LocalDate 值是多少,将其 dayOfWeek 属性设置为 Monday 总是能够四舍五入,这样的话,在每月的开始再加上 6 天就能够让您得到第一个星期一。再加上一天就得到第一个星期二。Joda 使得执行此类计算变得非常容易。

下面是其他一些因为使用 Joda 而变得超级简单的计算:

以下代码计算从现在开始经过两个星期之后的日期:

DateTime now = SystemFactory.getClock().getDateTime(); DateTime then = now.plusWeeks(2);

您可以以这种方式计算从明天起 90 天以后的日期:

DateTime now = SystemFactory.getClock().getDateTime(); DateTime tomorrow = now.plusDays(1); DateTime then = tomorrow.plusDays(90);

(是的,我也可以向 now 加 91 天,那又如何呢?)

下面是计算从现在起 156 秒之后的时间:

DateTime now = SystemFactory.getClock().getDateTime(); DateTime then = now.plusSeconds(156);

下面的代码将计算五年后的第二个月的最后一天:

DateTime now = SystemFactory.getClock().getDateTime(); DateTime then = now.minusYears(5) // five years ago          .monthOfYear()   // get monthOfYear property          .setCopy(2)    // set it to February          .dayOfMonth()   // get dayOfMonth property          .withMaximumValue();// the last day of the month

这样的例子实在太多了,我向您已经知道了如何计算。尝试操作一下样例应用程序,亲自体验一下使用 Joda 计算任何日期是多么有趣。

Joda-Tim

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号