Java 8之新日期时间API笔记(三)LocalDateTime

前言

时间是一个很宽泛的概念。有时候我们也不知道他到底是什么?当我们既想要操作年月日,又想要操作时分秒。LocalDate或者LocalTime只能操作一个维度。有能满足这个条件的类吗?-答案当然是有了,那就是LocalDateTime类。

LocalDateTime

LocalDateTime是遵守ISO-8601标准的日期时间类,数据格式例如:2007-12-03T10:15:30。因为是不可变对象,所以是线程安全的。

初始化方法

//获取当前时区日期时间
LocalDateTime localDateTime =  LocalDateTime.now();
//根据localDate和localTime初始化localDateTime
LocalDateTime localDateTime1 = LocalDateTime.of(localDate, localTime);
//根据传入参数初始化
LocalDateTime localDateTime2 = LocalDateTime.of(2018, 5, 3, 12, 32, 32);
//使用ISO-8601标准格式字符串初始化localDateTime
LocalDateTime localDateTime3 = LocalDateTime.parse("2007-12-03T10:15:30");

日期时间的修改

localDateTime = localDateTime.withYear(1932);
localDateTime = localDateTime.withMonth(12);//修改当前月份为12月
localDateTime = localDateTime.withDayOfMonth(23);//修改当前日期为当月
localDateTime = localDateTime.withDayOfYear(133);//修改当前日期为当年第133天
localDateTime = localDateTime.withHour(2);//修改当前时间为2点
localDateTime = localDateTime.withMinute(23);//修改当前时间为23分
localDateTime = localDateTime.withSecond(41);//修改当前描述
localDateTime = localDateTime.withNano(233);

//添加和前面类似可以在各个维度上面修改
...
//减少类似之前都可以在各个维度
...

比较

1.大小比较

localDateTime1.compareTo(localDateTime2); //结果小于0,localDateTime1小于localDateTime2。结果等于0,localDateTime1等于localDateTime2.。结果大于0,localDateTime1大于localDateTime2。
localDateTime1.isBefore(localDateTime2);
localDateTime1.isAfter(localDateTime2);
localDateTime1.isEqual(localDateTime2);

2.通过比较获取间隔
until方法是用来计算当前localDateTime和endExclusive之间时间间隔,间隔的单位根据传入的单位进行计算。
Ps:LocalDateTime,LocalDate,LocalTime都是Temporal类的子类。
PPs:第二个参数TemporalUnit是一个接口,我们一般使用他的枚举实现类ChronoUnit。

 public long until(Temporal endExclusive, TemporalUnit unit) {
 ...
 }

eg:

localDateTime1.until(localDateTime2, ChronoUnit.YEARS);//计算localDateTime1和localDateTime2相差多少年

转化

三者之间的转化也是我们经常要用到的操作

//localDate, localTime初始化LocalDateTime
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
//localDate转化成当天午夜时间(0点)的LocalDateTime
LocalDateTime localDateTime = localDate.atStartOfDay();
//localDate根据传入localTime转化成LocalDateTime
LocalDateTime localDateTime = localDate.atTime(localTime);
//localDate根据传入参数转化成LocalDateTime
LocalDateTime localDateTime = localDate.atTime(12, 32, 34);
//localTime根据传入localDate转化成LocalDateTime
LocalDateTime localDateTime = localTime.atDate(localDate);
//localDateTime转化成LocalDate
LocalDate localDate = localDateTime.toLocalDate();
//localDateTime转化成LocalTime
LocalTime localTime = localDateTime.toLocalTime();

总结
了解了LocalTime,LocalDate,LocalDateTime以后我们就可以对日期时间进行大部分操作了。接下来我们会研究下其他一些不太常用的操作和概念。