Java 8 Time API( 二 )

java.sql.Date相同的功能 。
// 当前日期LocalDate today = LocalDate.now();System.out.println("当前日期=" + today);// 通过提供年月日参数创建日期LocalDate nowYear_1024 = LocalDate.of(2022, Month.OCTOBER, 24);System.out.println("参数日期=" + nowYear_1024);// 通过时区获取当前日期LocalDate todayShanghai = LocalDate.now(ZoneId.of("Asia/Shanghai"));System.out.println("当前日期(CTT)=" + todayShanghai);// 从纪元日(1970-01-01)开始的第多少天LocalDate dateFromBase = LocalDate.ofEpochDay(365);System.out.println("1970-01-01的第365天= " + dateFromBase);// 某年的第多少天LocalDate hundredDay2022 = LocalDate.ofYearDay(2022, 100);System.out.println("2022年的第100天=" + hundredDay2022);运行之后结果如下:
当前日期=2022-10-26特殊日期=2022-10-24当前日期(CTT)=2022-10-261970-01-01的第365天= 1971-01-012022年的第100天=2022-04-102.LocalTimeLocalTime是一个不可变的时间类,它以HH:mm:ss.SSS的默认格式表示时间 。与LocalDate一样,这个类提供了时区支持,并可以通过传递小时、分钟和秒作为输入参数来创建实例 。
// 当前时间LocalTime time = LocalTime.now();System.out.println("当前时间=" + time);// 通过提供时分秒参数创建日期LocalTime specificTime = LocalTime.of(12, 20, 25, 40);System.out.println("参数时间=" + specificTime);// 通过时区获取当前时间LocalTime timeShanghai = LocalTime.now(ZoneId.of("Asia/Shanghai"));System.out.println("当前时间(CTT)=" + timeShanghai);// 从纪元日开始的第多少秒LocalTime specificSecondTime = LocalTime.ofSecondOfDay(100);System.out.println("从纪元日开始的第100秒=" + specificSecondTime);运行之后结果如下:
当前时间=15:39:18.948参数时间=12:20:25.000000040当前时间(CTT)=15:39:18.949从0开始的第100秒=00:01:403.LocalDateTimeLocalDateTime是一个不可变的日期时间类,它以yyyy-MM-ddTHH:mm:ss.SSS的默认格式表示时间日期 。它提供了一个工厂方法,该方法使用LocalDateLocalTime作为参数创建LocalDateTime实例 。
// 当前日期时间LocalDateTime now = LocalDateTime.now();System.out.println("当前日期时间=" + now);// 通过提供LocalDate和LocalTime参数创建日期时间now = LocalDateTime.of(LocalDate.now(), LocalTime.now());System.out.println("当前日期时间=" + now);// 通过提供年月日时分秒参数创建日期时间LocalDateTime specificTime = LocalDateTime.of(2022, Month.OCTOBER, 24, 10, 24, 24);System.out.println("参数日期时间=" + specificTime);// 通过时区获取当前日期时间LocalDateTime todayKolkata = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));System.out.println("当前日期时间(CTT)=" + todayKolkata);// 从纪元日开始的第多少秒LocalDateTime dateFromBase = LocalDateTime.ofEpochSecond(100, 0, ZoneOffset.UTC);System.out.println("从纪元日开始的第100秒= " + dateFromBase);运行之后结果如下:
当前日期时间=2022-10-26T15:51:59.070当前日期时间=2022-10-26T15:51:59.071参数日期时间=2022-10-24T10:24:24当前日期时间(CTT)=2022-10-26T15:51:59.071从纪元日开始的第100秒=1970-01-01T00:01:40注意:以上例子通过输入参数创建实例时,如果输入了无效的参数name将会抛出java.time.DateTimeException
4.Instantinstant类用于处理机器可读的时间格式 。instant类将日期时间存储在unix时间戳中 。
// 当期时间戳Instant timestamp = Instant.now();System.out.println("当期时间戳= "+timestamp);// 从纪元日开始的第多少毫秒Instant specificTime = Instant.ofEpochMilli(timestamp.toEpochMilli());System.out.println("从纪元日开始="+specificTime);运行之后结果如下:
当期时间戳=2022-10-26T08:08:40.429Z从纪元日开始=2022-10-26T08:08:40.429ZJava8日期时间API类的实用方法大多数日期时间类都会提供各种实用方法 , 例如加/减天数、周数、月数等 。还有一些其他实用方法可以使用时间调整器TemporalAdjuster调整日期 , 并计算两个日期之间的时间段 。
LocalDate today = LocalDate.now();//获取年份,判断年份是否是闰年System.out.println("Year "+today.getYear()+" is Leap Year? "+today.isLeapYear());//比较两个时间System.out.println("Today is before 01/01/2023? "+today.isBefore(LocalDate.of(2023,1,1)));//通过LocalDate创建LocalDateTimeSystem.out.println("Current Time="+today.atTime(LocalTime.now()));//加减操作System.out.println("10 days after today will be "+today.plusDays(10));System.out.println("3 weeks after today will be "+today.plusWeeks(3));System.out.println("20 months after today will be "+today.plusMonths(20));System.out.println("10 days before today will be "+today.minusDays(10));System.out.println("3 weeks before today will be "+today.minusWeeks(3));System.out.println("20 months before today will be "+today.minusMonths(20));//时间调整器调整时间System.out.println("First date of this month= "+today.with(TemporalAdjusters.firstDayOfMonth()));LocalDate lastDayOfYear = today.with(TemporalAdjusters.lastDayOfYear());System.out.println("Last date of this year= "+lastDayOfYear);Period period = today.until(lastDayOfYear);System.out.println("Period Format= "+period);System.out.println("Months remaining in the year= "+period.getMonths());

推荐阅读