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