Joda-Time的使用

Java开发中对于日期、时间的操作非常频繁,但是使用java.util.Calendar让人感到无比郁闷。
Joda-Time提供了一组Java类包用于处理包括ISO8601标准的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成。并且 Joda 与 JDK 是可互操作的。
以下通过对比DateTime和Calendar的使用让我们来了解下DateTime的更加方便的用法。
1 创建2016-07-22 10:00:01的对象

Calendar c = Calendar.getInstance();
c.set(2016,Calendar.JULY,22,10,0,1);


Joda定义如下

DateTime dateTime = new DateTime(2016,7,22,10,0,1);

 

2 在这个时间点上加90天

Calendar calendar = Calendar.getInstance();
calendar.set(2016, Calendar.JULY, 22, 10, 0, 1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
calendar.add(Calendar.DAY_OF_MONTH, 90);
System.out.println(sdf.format(calendar.getTime()));

 

Joda实现如下

DateTime dateTime = new DateTime(2016, 7, 22, 10, 0, 1);
DateTime dateTime90 = dateTime.plusDays(90);
System.out.println(dateTime90.toString("yyyyMMddHHmmss"));

 

3 计算某个时间点在90天后的某天在下一个月的当前周最后一天的日期
Joda很轻易的实现了:

DateTime day = dateTime.plusDays(90).plusMonths(1).dayOfWeek().withMaximumValue();
System.out.println(day.toString("yyyyMMddHHmmss"));

 

那么calendar该如何实现呢?大家自己想吧

4 Joda 和 JDK 互操作性,joda允许与JDk中的java.util.Date 的实例(和 Calendar)进行相互转换。

Calendar calendar = Calendar.getInstance();
DateTime dateTime = new DateTime(2016, 7, 22, 10, 0, 1);
System.out.println(dateTime.plusDays(90).plusMonths(1).dayOfWeek().withMaximumValue().toString("yyyyMMddHHmmss"));
calendar.setTime(dateTime.toDate())

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

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

 


6计算两个日期间隔的天数

LocalDate start=new LocalDate(2015, 11,14);
LocalDate end=new LocalDate(2016, 01, 15);
int days = Days.daysBetween(start, end).getDays();

 

7时间解析 

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dateTime2 = DateTime.parse("2015-10-20 23:20:41", format);

 
或者

DateTime dt2 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("2016-04-20 01:20:39");

 

8判断是否闰月

DateTime dt4 = new DateTime();
org.joda.time.DateTime.Property month = dt4.monthOfYear();
System.out.println("是否闰月:" + month.isLeap());

猜你喜欢

转载自shukuiyan.iteye.com/blog/2312967