JAVA SE 8 学习笔记(四)日期和时间API

本文详细介绍了Java 8中的日期和时间API,包括Instant、Duration、LocalDate、TemporalAdjuster、LocalTime、LocalDateTime、ZoneId、ZonedDateTime以及DateTimeFormatter的使用。强调了API的不可变性、时间线概念、日期校正器的常见操作以及时间的格式化和解析。
摘要由CSDN通过智能技术生成

・所有的java.time对象都是不可变的

・一个瞬间(Instant)是时间线上的一个点

・在Java事件中,每天都是86400秒

・持续时间(Duration)是两个瞬间之间的时间

・LocalXXX 没有时区信息

・TemporalAdjuster可以处理常用日历计算美丽如找到某个月的第一个星期二


1.时间线

Instant对象为时间轴上的一个点,原点为1970.1.1日午夜

Duration表示两个瞬时点之间的时间量。


两者提供多个plus/minus/multipliedBy/dividedBy方法以供计算

也可以使用toNano方法以long值进行计算


保存Api链接随时查阅:

Instant  https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html

Duration  https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html


2.本地日期

在新的Java API中,包含两种人类时间:本地日期/带时区的日期

由于有些操作不需要时区,或者为了排除夏令时等的影响,使用本地日期进行计算更为适合


LocalDate包含年月日的信息:

LocalDate today = LocalDate.now();

LocalDate birthday = LocalDate.of(1991,2,3);

LocalDate birthday = LocalDate.of(1991, Month.JUNE, 14);


LocalDatehttps://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html


两个Instant之间的距离是Duration,对于本地日期,两个LocalDate之间的距离就是Period(时段)


Period: https://docs.oracle.com/javase/8/docs/api/java/time/Period.html


例如增加一年的时间,如果使用day.plus(Duration.ofDays(365))在闰年的时候便会错误,正确的方法是birthday.plusYear(1)或者birthday.plus(Period.ofYear(1))


注意:LocalDate的getDayOfWeek与Calendar不同,周一为1,周日为7(Calendar周日为1,周六为7)


3.日期校正器

TemporalAdjuster提供许多静态方法进行常用校正。


例如将校正方法的结果传递给LocalDate的with方法,计算某个月的第一个周二

LocalDate.of(year, month, 1).with(TemporalAdjuster.nextOrSame(DayOfWeek.TUESDAY));


也可以实现TemporalAdjuster接口创建自己的校正

TemporalAdjuster NEXT_WORKDAY =TemporalAdjusters.ofDateAdjuster(w -> {

LocalDate = result =w;

//  计算日期..

return result;

});


TemporalAdjuster: https://docs.oracle.com/javase/jp/8/docs/api/java/time/temporal/TemporalAdjusters.html


4.本地时间

与本地日期相对,LocalTime表示一天中某个时间。LocalDateTime表示一个日期和时间

LocalTime.now()

LocalTime.of(22,30)

LocalTime.of(22,30, 10);


LocalTime: https://docs.oracle.com/javase/8/docs/api/java/time/LocalTime.html

LocalDateTime:https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html


5.带时区的时间

每个时区都有一个ID,比如America/New_York。想要获得所有时区可以调用ZoneId.getAvailableIds

根据指定的id,ZoneId.of(id)会返

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值