java8中新的日期和时间API

日期时间API发展历程

  • java1.0 只有java.util.Date类
  • jdk1.1 java.util.Calender类
  • jdk1.8 java.time.*

JDK1.8的java.time包。

jdk8在java.time包中提供了很多可以操作的类。、

  • LocalDate
    该类是一个不可变对象。他只提供了简单的日期,不提供当天的时间。也不附带任何和时区相关的信息。
System.out.println("年份:" + date.getYear());
System.out.println("月份:" + date.getMonth().getValue());
System.out.println("月份:" + date.getMonthValue());
System.out.println("一个月中的第几天:" + date.getDayOfMonth());
System.out.println("一周中的第n天:n=" + date.getDayOfYear());
System.out.println("一周中的第n天:n=" + date.getDayOfWeek());
System.out.println("一个月的长度:" + date.lengthOfMonth());
System.out.println("一年的长度:" + date.lengthOfYear());
System.out.println("是否是闰年:" + date.isLeapYear());

// 获取日期二
LocalDate now = LocalDate.now();
// 获取日期三


// 也可以这样获取时间
int year = date.get(ChronoField.YEAR);
int month = date.get(ChronoField.MONTH_OF_YEAR);
int day = date.get(ChronoField.DAY_OF_MONTH);
  • LocalDateTime 日期和时间
LocalDateTime dt1 = LocalDateTime.of(2019, Month.MARCH, 18, 13, 45, 20);

LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dt2 = LocalDateTime.of(date, time);
LocalDateTime dt3 = date.atTime(time);
LocalDateTime dt4 = date.atTime(12, 1);
LocalDateTime dt5 = date.atTime(12, 1, 6);

  • 机器的日期和时间格式 java.time.Instant
    Instant设计的初衷是便于机器使用.它包含的是秒及纳秒构成的数据.所以它无法处理那些我们非常容易的理解的时间单位.

注意

以上所有的类都实现了Temporal接口.它定义了如何读取和操作为时间建模的对象的值.
那么就很容易创建两个Temporal对象之间的duration.


// 注意不能计算两个LocalDate之间的时间间隔,更不能混用。
LocalDateTime now = LocalDateTime.now();
LocalDateTime pre = LocalDateTime.of(2019, 2, 22, 0, 0, 0);

Duration between = Duration.between(pre, now);
System.out.println(between.getSeconds());

java.time.temporal.TemporalAdjuster

有的时候,你需要进行一些更加复杂的操作,比如,将日期调整到下个周日、下个工作日,或者是本月的最后一天。

LocalDate now = LocalDate.now();
LocalDate date1 = now.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY));
System.out.println(date1);

LocalDate date2 = now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
System.out.println(date2);

格式化和解析日期时间对象 java.time.format

  • java.time.format.DateTimeFormatter

LocalDate now = LocalDate.now();
System.out.println(now.format(DateTimeFormatter.BASIC_ISO_DATE));
System.out.println(LocalDate.parse("2019-02-23", DateTimeFormatter.ISO_LOCAL_DATE));

// 创建自定义的格式器
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
System.out.println(now.format(dateTimeFormatter));

// 使用DateTimeFormatterBuild创建自己的格式器
DateTimeFormatter dateTimeFormatter1 = new DateTimeFormatterBuilder().appendText(ChronoField.DAY_OF_MONTH)
        .appendLiteral(", ").toFormatter();
System.out.println(now.format(dateTimeFormatter1));

处理不同的时区和历法

  • 时区 java.util.ZoneId: 无需为时区处理的复杂和繁琐而操心
LocalDate now = LocalDate.now();
System.out.println(now.atStartOfDay(ZoneId.of("Asia/Shanghai")));

LocalDateTime now1 = LocalDateTime.now();
System.out.println("巴黎时间:" + now1.atZone(ZoneId.of("Europe/Paris")));

Instant now2 = Instant.now();
System.out.println(now2.atZone(ZoneId.of("Europe/Paris")));
  • 使用别的日历系统
    JDK8中提供了ThaiBuddhistDate、MinguoDate 、JapaneseDate 以及HijrahDate(伊斯兰教日历)四种日历系统。
    利用LocalDate对象即可对公历的日期建模。也可以事业红红Temporal对象创建JapaneseDate.from(data);

最后

如果你觉得写的还不错,就关注下公众号呗,关注后,有点小礼物回赠给你。
你可以获得5000+电子书,java,springCloud,adroid,python等各种视频教程,IT类经典书籍,各种软件的安装及破解教程。
希望一块学习,一块进步!
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方_小_白

谢谢金主子,记得关注方家小白哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值