Joda-Time 简介

来源:互联网 发布:矩阵怎么计算 编辑:程序博客网 时间:2024/06/04 08:03

      前言:

      最近在项目中,遇到了时间的转换问题。处理方式就是使用

@JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8") 将jason形式的日期转换成yyyy-mm-dd的形式。
这只是日期的转换形式,那么遇到了日期的加减法就有点麻烦了。这里介绍一个比较好用的东西,那就是joda-time。

内容:

   Joda-Time 令时间和日期值变得易于管理、操作和理解。事实上,易于使用是 Joda 的主要设计目标。
其他目标包括可扩展性、完整的特性集以及对多种日历系统的支持。并且 Joda 与 JDK 是百分之百可互操作的,
因此您无需替换所有 Java 代码,只需要替换执行日期/时间计算的那部分代码。

以Joda的方式处理时间

现在,您已经了解了如何创建一些非常有用的 Joda 类,我将向您展示如何使用它们执行日期计算。接着您将了解到 
Joda 如何轻松地与 JDK 进行互操作。
日期计算
  如果只需要对日期/时间信息使用占位符,那么JDK完全可以胜任,但是它在日期/时间计算方面的表现十分糟糕,这正是JOda的
长处。
如:使用joda计算日期
LocalDate now = SystemFactory.getClock().getLocalDate();LocalDate lastDayOfPreviousMonth =\now.minusMonths(1).dayOfMonth().withMaximumValue();
 dayOfMonth() 调用感兴趣。这在 Joda 中被称为属性(property)。它相当于 Java 对象的属性。属性是根据所表示的常见结构命名的,并且它被用于访问这个结构,用于完成计算目的。属性是实现 Joda 计算威力的关键。您目前所见到的所有 4 个 Joda 类都具有这样的属性。一些例子包括:
1、yearOfCentury
2、dayOfYear
3、monthOfYear
4、dayOfMonth
5、dayOfWeek
如:计算 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

以Joda方式格式化时间

使用JDK格式化日期以实现打印是完全可以的。但是应该更简单一些。
要格式化一个 Joda 对象,调用它的 toString() 方法,并且如果您愿意的话,
传递一个标准的 ISO-8601 或一个 JDK 兼容的控制字符串,以告诉 JDK 如何执行格式化。
不需要创建单独的 SimpleDateFormat 对象(但是 Joda 的确为那些喜欢自找麻烦的人提供了
一个 DateTimeFormatter 类)。调用 Joda 对象的 toString() 方法,仅此而已。
使用ISO-8601
DateTime dateTime = SystemFactory.getClock().getDateTime();dateTime.toString(ISODateTimeFormat.basicDateTime());dateTime.toString(ISODateTimeFormat.basicDateTimeNoMillis());dateTime.toString(ISODateTimeFormat.basicOrdinalDateTime());dateTime.toString(ISODateTimeFormat.basicWeekDateTime());
结果:
20090906T080000.000-050020090906T080000-05002009249T080000.000-05002009W367T080000.000-0500

也可以传递与 SimpleDateFormat JDK 兼容的格式字符串,如
DateTime dateTime = SystemFactory.getClock().getDateTime();dateTime.toString("MM/dd/yyyy hh:mm:ss.SSSa");dateTime.toString("dd-MM-yyyy HH:mm:ss");dateTime.toString("EEEE dd MMMM, yyyy HH:mm:ssa");dateTime.toString("MM/dd/yyyy HH:mm ZZZZ");dateTime.toString("MM/dd/yyyy HH:mm Z"); 09/06/2009 02:30:00.000PM06-Sep-2009 14:30:00Sunday 06 September, 2009 14:30:00PM09/06/2009 14:30 America/Chicago09/06/2009 14:30 -0500

查看 Javadoc 中有关 joda.time.format.DateTimeFormat 的内容,获得与 JDK SimpleDateFormat 兼容的格式字符串的更多信息,
并且可以将其传递给 Joda 对象的 toString() 方法。

本篇博客参照点击打开链接,如有不明之处,请查看原文。

结束语:
joda-time将时间的加减简化。对日期的处理比较简单和高效。