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类经典书籍,各种软件的安装及破解教程。
希望一块学习,一块进步!

你可能感兴趣的:(jdk8)