firemail

标题: Joda-Time [打印本页]

作者: java    时间: 2017-8-3 19:26
标题: Joda-Time
https://www.ibm.com/developerworks/cn/java/j-jodatime.html
[size=1.0625]为什么要使用 Joda?考虑创建一个用时间表示的某个随意的时刻 — 比如,2000 年 1 月 1 日 0 时 0 分。我如何创建一个用时间表示这个瞬间的 JDK 对象?使用 java.util.Date?事实上这是行不通的,因为自 JDK 1.1 之后的每个 Java 版本的 Javadoc 都声明应当使用 java.util.Calendar。Date 中不赞成使用的构造函数的数量严重限制了您创建此类对象的途径。
[size=1.0625]然而,Date 确实有一个构造函数,您可以用来创建用时间表示某个瞬间的对象(除 “现在” 以外)。该方法使用距离 1970 年 1 月 1 日子时格林威治标准时间(也称为 epoch)以来的毫秒数作为一个参数,对时区进行校正。考虑到 Y2K 对软件开发企业的重要性,您可能会认为我已经记住了这个值 — 但是我没有。Date 也不过如此。
[size=1.0625]那么 Calendar 又如何呢?我将使用下面的方式创建必需的实例:
Calendar calendar = Calendar.getInstance();
calendar.set(2000, Calendar.JANUARY, 1, 0, 0, 0);



[size=1.0625]使用 Joda,代码应该类似如下所示:
DateTime dateTime = new DateTime(2000, 1, 1, 0, 0, 0, 0);

[size=1.0625]这一行简单代码没有太大的区别。但是现在我将使问题稍微复杂化。假设我希望在这个日期上加上 90 天并输出结果。使用 JDK,我需要使用清单 1 中的代码:
清单 1. 以 JDK 的方式向某一个瞬间加上 90 天并输出结果
  1. Calendar calendar = Calendar.getInstance();
  2. calendar.set(2000, Calendar.JANUARY, 1, 0, 0, 0);
  3. SimpleDateFormat sdf =
  4.   new SimpleDateFormat("E MM/dd/yyyy HH:mm:ss.SSS");
  5. calendar.add(Calendar.DAY_OF_MONTH, 90);
  6. System.out.println(sdf.format(calendar.getTime()));
复制代码
[size=1.0625]使用 Joda,代码如清单 2 所示:
清单 2. 以 Joda 的方式向某一个瞬间加上 90 天并输出结果
  1. DateTime dateTime = new DateTime(2000, 1, 1, 0, 0, 0, 0);
  2. System.out.println(dateTime.plusDays(90).toString("E MM/dd/yyyy HH:mm:ss.SSS");
复制代码








欢迎光临 firemail (http://firemail.wang:8088/) Powered by Discuz! X3