简介
想必大家在平时的项目开发中经常要处理日期的问题,比如需要处理两个日期间隔的天数,使用JDK1.8以前自带的日期API处理相当的繁琐(JDK1.8的API已经重写了日期库,其实也是借鉴了Joda-Time),那么接下来介绍的这款日期库工具(Joda-Time)就非常强大了,使用Joda-Time可以轻松的处理各种复杂的时间相关问题。
特点
- 易于使用:使用Joda-Time可以非常容易的处理一些复杂的日期问题
- 易于扩展:Joda-Time支持多达8种日历系统
- 线程安全:Joda类具有不可变性,因此它们的实例无法被修改
- 提供最新的时区计算
- 互操作性:与JDK可互操作
类说明
- Instant:不可变类,代表时间线上的一个唯一的时间点
- DateTime:不可变类,它以毫秒级的精度封装时间上的某个瞬间时刻
- LocalDate:不可变类,该类封装了一个年/月/日的组合。当地理位置(即时区)变得不重要时,使用它存储日期将非常方便
- LocalTime:不可变类,这个类封装一天中的某个时间,当地理位置不重要的情况下,可以使用这个类来只存储一天当中的某个时间
- LocalDateTime:不可变类,该类封装了一个年/月/日 时:分:秒的组合。当地理位置(即时区)变得不重要时,使用它存储日期和时间非常方便
使用示例
(1)使用maven导入Joda-Time包
joda-time joda-time 2.9.7
(2)DateTime使用
如需输出当前日期和时间
DateTime dateTime = new DateTime();System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss"));//本月多少号int dayOfMonth = dateTime.getDayOfMonth();//本年的第几月int monthOfYear = dateTime.getMonthOfYear();//获取年份int year = dateTime.getYear();//当前日期+1天后的时间dateTime = dateTime.plusDays(1);//当前日期+1小时的时间dateTime = dateTime.plusHours(1);//当前日期-1年前的时间dateTime = dateTime.plusYears(-1);//创建指定日期时间如:2017-2-28 10:40:50:500DateTime dateTime = new DateTime(2017,2,28,10,40,50,500);
(3)LocalDate使用
该类代表没有时区的日期,适用与对时区不关心的日期场景
LocalDate localDate = new LocalDate();LocalDate lDate = new LocalDate(2017,12,12);
(4)LocalTime使用
该类代表没有时区的时间,适用与对时区不关心的时间场景
LocalTime localTime = new LocalTime();LocalTime lTime = new LocalTime(12,20,10);
(5)LocalDateTime使用
该类代表没有时区的日期时间,适用与对时区不关心的日期时间场景
LocalDateTime localDateTime = new LocalDateTime();//2017-12-12 13:10:18LocalDateTime localDateTime2 = new LocalDateTime(2017,12,12,13,10,18);
(6)与JDK互操作
Date date = dateTime.toDate();Calendar calendar = dateTime.toCalendar(Locale.CHINESE);
(7)综合使用
LocalDate localDate = new LocalDate();//计算下一个月的第一天的日期localDate = localDate.plusMonths(1).dayOfMonth().withMinimumValue();DateTime dateTime = new DateTime();//计算一年前的第二个月的最后一天的日期DateTime dateTime = dateTime.minusYears(1) // 一年前 .monthOfYear() // 获得 monthOfYear 属性 .setCopy(2) // 设置为2月 .dayOfMonth() // 获得 dayOfMonth 属性 .withMaximumValue();// 一个月中的最后一天