Joda-Time的使用

Joda-Time 处理日期时间的库

常用的类

Instant :用来表示时间轴上一个瞬时的点(时间戳) 
DateTime :用来替换JDK的Calendar类 
LocalDate :表示一个本地的日期,而不包含时间部分(没有时区信息) 
LocalTime :表示一个本地的时间,而不包含日期部分(没有时区信息) 
LocalDateTime:表示一个本地的日期-时间(没有时区信息)

依赖

<dependency>
     <groupId>joda-time</groupId>
     <artifactId>joda-time</artifactId>
     <version>2.10.5</version>
</dependency>

获取当前时间

DateTime dt = new DateTime();
System.out.println(dt.toString("yyyy-MM-dd HH:mm:ss"));

2020-03-27 12:36:58

获取月份及年

DateTime dt = new DateTime();
System.out.println(dt.monthOfYear().getAsText());
System.out.println(dt.year().getAsText());

三月
2020

获取10年后

DateTime dt = new DateTime();
DateTime dtyear10 = dt.year().addToCopy(10);
System.out.println(dtyear10.toString("yyyy-MM-dd HH:mm:ss"));

获取每天的零点

dt=new DateTime().withMillisOfDay(0);
System.out.println(dt.toString("yyyy-MM-dd HH:mm:ss"));

2020-03-27 00:00:00

获取明天的零点

dt=new DateTime().withMillisOfDay(0).plusDays(1);
System.out.println(dt.toString("yyyy-MM-dd HH:mm:ss"));

2020-03-28 00:00:00

获取每个月的第一天和最后一天

dt=new DateTime();
System.out.println(dt.dayOfMonth().withMinimumValue().dayOfMonth().get());
System.out.println(dt.dayOfMonth().withMaximumValue().dayOfMonth().get());

1
31

获取每天的12:30

dt=new DateTime().withHourOfDay(12).withMinuteOfHour(30).withSecondOfMinute(0);
System.out.println(dt.toString("yyyy-MM-dd HH:mm:ss"));

2020-03-27 12:30:00

获取每个月10号12:30

dt=new DateTime().withDayOfMonth(10).withHourOfDay(12).withMinuteOfHour(30).withSecondOfMinute(0);
System.out.println(dt.toString("yyyy-MM-dd HH:mm:ss"));

获取每年3月10号12:30

dt=new DateTime().withMonthOfYear(3).withDayOfMonth(10).withHourOfDay(12).withMinuteOfHour(30).withSecondOfMinute(0);
System.out.println(dt.toString("yyyy-MM-dd HH:mm:ss"));

日期差

DateTime start=new DateTime(2020,2,25,9,00);
DateTime end=new DateTime(2020,3,27,13,10);
Period period=new Period(start,end);
System.out.println("month:"+period.getMonths());
System.out.println("days:"+period.getDays());
System.out.println("hours:"+period.getHours());
System.out.println("minutes:"+period.getMinutes());
System.out.println("second:"+period.getSeconds());

month:1
days:2
hours:4
minutes:10
second:0

相差天数

DateTime start=new DateTime(2020,3,25,9,00);
DateTime end  =new DateTime(2020,3,27,13,10);
System.out.println(Days.daysBetween(start,end).getDays());

2

相差小时数

DateTime start=new DateTime(2020,3,25,9,00);
DateTime end  =new DateTime(2020,3,27,13,10);
System.out.println(Hours.hoursBetween(start,end).getHours());

DateTime start=new DateTime(2020,3,25,9,00);
DateTime end=new DateTime(2020,3,27,13,10);
Duration duration=new Duration(start,end);
System.out.println(duration.getStandardHours());

52

相差分钟数

DateTime start=new DateTime(2020,3,25,9,00);
DateTime end  =new DateTime(2020,3,27,13,10);
System.out.println(Minutes.minutesBetween(start,end).getMinutes());

3130

相差秒数

DateTime start=new DateTime(2020,3,25,9,00);
DateTime end  =new DateTime(2020,3,27,13,10);
System.out.println(Seconds.secondsBetween(start,end));

PT187800S

判断时间是否在某个范围内

DateTime start=new DateTime(2020,2,25,9,00);
DateTime end=new DateTime(2020,3,27,13,10);
Interval interval=new Interval(start,end);
System.out.println(interval.contains(new DateTime(2020,3,27,13,00)));
System.out.println(interval.contains(new DateTime(2020,3,27,13,30)));

true
false

是否为闰月

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

是否闰月:false

posted @ 2020-03-27 13:20  慕尘  阅读(616)  评论(0编辑  收藏  举报