LocalDateTime、LocalDate、LocalTime常用方法

LocalDateTimeLocalDateLocalTime是 Java8 提供的位于 java.time 包下的新的日期与时间处理类。一个重要的特性是它们都是线程安全的。

源码注释:This class is immutable and thread-safe.(不可变、线程安全)

获取当前日期-时间:now

LocalDateTime包含年月日时分秒:

LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime.now()

LocalDate只包含年月日:

LocalDate localDate = LocalDate.now();
LocalDate.now()

LocalTime只包含时分秒:

LocalTime localTime = LocalTime.now();
LocalTime.now()
获取指定日期-时间:of
//获取2020年4月1日12时0分0秒的日期时间
LocalDateTime localDateTime = LocalDateTime.of(2020, 4, 1, 12, 0, 0);
//或者先指定LocalDate、LocalTime
LocalDate localDate = LocalDate.of(2020, 4, 1);
LocalTime localTime = LocalTime.of(12, 0, 0);
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
解析字符串日期-时间:parse

使用 DateTimeFormatter.ofPattern(String pattern) 指定解析格式。

LocalDateTime localDateTime = LocalDateTime.parse("2020-04-02 12:12:12", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

LocalDate localDate = LocalDate.parse("2020/04/01", DateTimeFormatter.ofPattern("yyyy/MM/dd"));

LocalTime localTime = LocalTime.parse("121212", DateTimeFormatter.ofPattern("HHmmss"));

注意:使用 LocalDateTime.parse() 解析时要解析的字符串日期要包含时分秒,否则将报解析异常。

格式化日期-时间:format

使用 DateTimeFormatter.ofPattern(String pattern) 指定格式化格式。

LocalDateTime localDateTime = LocalDateTime.of(2020, 4, 1, 12, 0, 0);
String dateTime = localDateTime.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
> 结果:2020/04/01 12:00:00

LocalDate localDate = LocalDate.now();
String date = localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
> 结果:2020-04-01

LocalTime localTime = LocalTime.now();
String time = localTime.format(DateTimeFormatter.ofPattern("HH:mm:ss"));
> 结果:12:12:12
日期-时间增减:plus、minus
LocalDateTime localDateTime = LocalDateTime.now();

localDateTime = localDateTime.minusYears(2);      //加两年
localDateTime = localDateTime.minusMonths(2);     //减两月
......
//指定加减的单位
localDateTime = localDateTime.minus(1, ChronoUnit.DAYS);    //减一天
localDateTime = localDateTime.plus(1, ChronoUnit.HOURS);    //加一小时
日期时间间隔:Duration

Duration用于获取两时间的间隔秒+纳秒,传入的时间对象必须含有秒SECONDS单元,所以可以计算LocalDateTimeLocalTime不能用于计算LocalDate。如果两对象是不同类型的,则根据第一个对象的类型来计算时间间隔。例如,如果第一个参数是LocalTime,则第二个参数将转换为LocalTime

//计算两个LocalDateTime的秒间隔
LocalDateTime start = LocalDateTime.of(2020, 2, 29, 12, 0, 0);
LocalDateTime end = LocalDateTime.of(2020, 4, 3, 12, 0, 0);
Duration duration = Duration.between(start, end);

//计算两个LocalTime的秒间隔
Duration duration1 = Duration.between(LocalTime.of(12, 0, 0), LocalTime.of(14, 0, 0));

获取的结果:

Duration.between

根据Duration转换天toDays、小时toHours、分钟toMinutes

long days = duration.toDays();
long hours = duration.toHours();
long minutes = duration.toMinutes();

Duration也可使用plus、minus进行增减操作

duration = duration.plusDays(1);    //加一天
duration = duration.minus(1, ChronoUnit.HOURS);    //减一小时
日期间隔:Period

Period用于获取一个期间,该期间由两个日期之间的年,月和日组成。包括开始日期,但不包括结束日期

LocalDate start = LocalDate.of(2018, 2, 12);
LocalDate end = LocalDate.of(2020, 4, 1);
Period period = Period.between(start, end);

//提取间隔年、月、天
int days = period.getDays();
int months = period.getMonths();
int years = period.getYears();
Period.between()

注意:从上面可以看出,使用Period获取的的间隔会做合并处理。比如3月1日至3月31日则记为一个月。实列:从2010-01-15到2011-03-18是一年零两个月零三天。

之前说了使用Duration可以计算LocalDateTimeLocalTime,不能用于计算LocalDate间隔。使用Period获取的的间隔又会做合并处理。那么怎么才能求两个LocalDate的实际间隔天数呢?答案是使用toEpochDay:

LocalDate start = LocalDate.of(2020, 2, 12);
LocalDate end = LocalDate.of(2020, 4, 1);
long days =  end.toEpochDay() - start.toEpochDay();

Instant

获取当前时间:now

 //默认UTC时区
Instant instant = Instant.now(); 
System.err.println(instant);
//使用时区偏移获取当前时区
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.err.println(offsetDateTime);


输出结果:
2020-07-12T12:46:52.733Z
2020-07-12T20:46:52.733+08:00

时间戳:

7instant.toEpochMilli();

TemporalAdjuster:时间校正器

TemporalAdjusters:该类通过静态方法提供了大量的常用TemporalAdjuster的实现

举例:
LocalDateTime dateTime = LocalDateTime.now();
LocalDateTime lo = dateTime.with(TemporalAdjusters.firstInMonth(DayOfWeek.FRIDAY));
System.err.println(lo);

输出结果:2020-07-03T22:12:05.123
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容