Joda-Time的使用

2 篇文章 0 订阅
2 篇文章 0 订阅

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());

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值