ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
>[success] # java.time 1. `java.time` 是Java8日期类,JDK 1.0中包含了一个`java.util.Date`类,但是它的大多数方法已经在`JDK 1.1引入Calendar类`之后**被弃用**,但是Calendar 类也相对存在一些问题 1.1. 格式化只对Date类有用,对Calendar类则不能使用 1.2. Date类中的年份是从1900开始的,而月份都从0开始 需要去减掉1900 1.3. 非线程安全 >[info] ## java8 日期类型 **Java 8通过发布新的Date-Time API来进一步加强对 日期与时间的处理**。 1. `java.time`包:该包日期/时间API的基础包。 2. `java.time.chrono`包:该包提供对不同日历系统的访问。 3. `java.time.format`包:该包能够格式化和解析日期时间对象。 4. `java.time.temporal`包:该包包含底层框架和扩展特性。 5. `java.time.zone`包:该包支持不同时区以及相关规则的类。 >[danger] ##### LocalDate -- 类 1. `java.time.LocalDate`类主要用于描述年\-月\-日格式的日期信息,该类不表示时间和时区信息 | 方法声明 |功能介绍| | -- |--| | static LocalDate now() |在默认时区中从系统时钟获取当前日期| ~~~ public class DateTest { public static void main(String[] args) { // 获取当前日期信息并打印 LocalDate ld = LocalDate.now(); System.out.println(ld); // 2022-10-06 } } ~~~ >[danger] ##### LocalTime -- 类 1. `java.time.LocalTime` 类主要用于描述时间信息,**可以描述时分秒以及纳秒** |方法声明 |功能介绍| | -- |--| |static LocalTime now() |从默认时区的系统时间中获取当前时间| |static LocalTime now(ZoneId zone) |获取指定时区的当前时间| ~~~ import java.time.LocalTime; public class DateTest { public static void main(String[] args) { // 获取当前时间信息并打印 LocalTime now1 = LocalTime.now(); System.out.println("获取到的当前时间是:" + now1); // 获取到的当前时间是:15:53:25.889174300 } } ~~~ >[danger] ##### LocalDateTime -- 类 1. `java.time.LocalDateTime`类主要用于描述ISO-8601日历系统中没有时区的日期时间 |方法声明 |功能介绍| | -- |--| |static LocalDateTime now()|从默认时区的系统时间中获取当前日期时间| |static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second)|根据参数指定的年月日时分秒信息来设置日期时间| |int getYear() |获取年份字段的数值| |int getMonthValue() |获取1到12之间的月份字段| |int getDayOfMonth()|获取日期字段| |int getHour() |获取小时数| |int getMinute() |获取分钟数| |int getSecond()| 获取秒数| |LocalDateTime withYear(int year)| 设置为参数指定的年| |LocalDateTime withMonth(int month) |设置为参数指定的月| |LocalDateTime withDayOfMonth(int dayOfMonth) |设置为参数指定的日| |LocalDateTime withHour(int hour) |设置为参数指定的时| |LocalDateTime withMinute(int minute) |设置为参数指定的分| |LocalDateTime withSecond(int second) |设置为参数指定的秒| |LocalDateTime plusYears(long years) |加上参数指定的年| |LocalDateTime plusMonths(long months) |加上参数指定的月| |LocalDateTime plusDays(long days) |加上参数指定的日| |LocalDateTime plusHours(long hours) |加上参数指定的时| |LocalDateTime plusMinutes(long minutes) |加上参数指定的分| |LocalDateTime plusSeconds(long seconds) |加上参数指定的秒| |LocalDateTime minusYears(long years) |减去参数指定的年| |LocalDateTime minusMonths(long months) |减去参数指定的月| |LocalDateTime minusDays(long days) |减去参数指定的日| |LocalDateTime minusHours(long hours) |减去参数指定的时| |LocalDateTime minusMinutes(long minutes) |减去参数指定的分| |LocalDateTime minusSeconds(long seconds) |减去参数指定的秒| ~~~ import java.time.LocalDateTime; public class DateTest { public static void main(String[] args) { // 获取当前日期时间信息并打印,使用最多 LocalDateTime now2 = LocalDateTime.now(); System.out.println("获取到的当前日期时间是:" + now2); // 获取到的当前日期时间是:2022-10-06T15:54:13.178964500 // 设置指定年月日时分秒 LocalDateTime of = LocalDateTime.of(2022, 8, 8, 8, 8, 8); // 自动调用toString方法 System.out.println(of); // 2022-08-08T08:08:08 System.out.println("获取到的年是:" + of.getYear()); // 2022 System.out.println("获取到的月是:" + of.getMonthValue()); // 8 System.out.println("获取到的日是:" + of.getDayOfMonth()); // 8 System.out.println("获取到的时是:" + of.getHour()); // 8 System.out.println("获取到的分是:" + of.getMinute()); // 8 System.out.println("获取到的秒是:" + of.getSecond()); // 8 // ----------------------设置指定年月日 ------------------ LocalDateTime of1 = LocalDateTime.of(2022, 8, 8, 8, 8, 8); // 调用对象本身的数据内容不会改变(并没有改变of1)。 创建了一个新的对象,由此证明了不可变性 LocalDateTime localDateTime = of1.withYear(2012); System.out.println("localDateTime = " + localDateTime); // 2012-08-08T20:08:08 System.out.println("of1 = " + of1); // of1 = 2022-08-08T08:08:08 LocalDateTime localDateTime1 = localDateTime.withMonth(12); System.out.println("localDateTime1 = " + localDateTime1); // localDateTime1 = 2012-12-08T08:08:08 // 日期的加减 LocalDateTime now3 = LocalDateTime.now(); // 2022-10-11T16:14:00.115520 LocalDateTime day5 = now3.plusDays(5); System.out.println(day5); // 2022-10-11T16:13:14.738725600 LocalDateTime day10 = now3.minusDays(10); System.out.println(day10); // 2022-09-26T16:14:00.115520 } } ~~~ >[danger] ##### Instant --- 类 1. `java.time.Instant`类主要用于描述瞬间的时间点信息 |方法声明 |功能介绍| | -- |--| |static Instant now()| 从系统时钟上获取当前时间| |OffsetDateTime atOffset(ZoneOffset offset) |将此瞬间与偏移量组合以创建偏移日期时间| | static Instant ofEpochMilli(long epochMilli)|根据参数指定的毫秒数来构造对象,参数为距离1970年1月1 日0时0分0秒的毫秒数| | long toEpochMilli()| 获取距离1970年1月1日0时0分0秒的毫秒数| ~~~ import java.time.Instant; import java.time.OffsetDateTime; import java.time.ZoneOffset; public class DateTest { public static void main(String[] args) { // 1.使用Instant类来获取当前系统时间 并不是当前系统的默认时区 本初子午线 差8小时 东八区 Instant now = Instant.now(); System.out.println("获取到的当前时间为:" + now); // 获取到的当前时间为:2022-10-06T09:15:47.127236Z // 2.加上时区所差的8个小时 OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8)); System.out.println("偏移后的日期时间为:" + offsetDateTime); // 偏移后的日期时间为:2022-10-06T17:15:47.127236+08:00 System.out.println("--------------------------------------------------------"); // 3.获取当前调用对象距离标准基准时间的毫秒数 long g1 = now.toEpochMilli(); System.out.println("获取到的毫秒差为:" + g1); // 获取到的毫秒差为:1665047747127 // 4.根据参数指定的毫秒数来构造对象 Instant instant = Instant.ofEpochMilli(g1); System.out.println("根据参数指定的毫秒数构造出来的对象为:" + instant); // 偏移后的日期时间为:2022-10-06T17:15:47.127236+08:00 } } e ~~~ >[danger] ##### DateTimeFormatter -- 类 1. `java.time.format.DateTimeFormatter`类主要用于格式化和解析日期 |方法声明 |功能介绍| | -- |--| |static DateTimeFormatter ofPattern(String pattern) |根据参数指定的模式来获取对象| |String format(TemporalAccessor temporal) |将参数指定日期时间转换为字符串| |TemporalAccessor parse(CharSequence text) |将参数指定字符串转换为日期时间| ~~~ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAccessor; public class DateTest { public static void main(String[] args) { // 1.获取当前系统的日期时间并打印 LocalDateTime now = LocalDateTime.now(); System.out.println("now = " + now); // now = 2022-10-06T19:53:47.821575900 // 2.按照指定的格式准备一个DateTimeFormatter类型的对象 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 3.实现日期时间向字符串类型的转换并打印 String str = dateTimeFormatter.format(now); System.out.println("调整格式后的结果是:" + str); // 调整格式后的结果是:2022-10-06 19:53:47 // 4.实现字符串类型到日期时间类型的转换并打印 TemporalAccessor parse = dateTimeFormatter.parse(str); System.out.println("转回去的结果是:" + parse); // 转回去的结果是:{},ISO resolved to 2022-10-06T19:53:47 } } ~~~