日期时间API(JDK8新增)
LocalDate、LocalTime、LocalDateTime 的使用
类似于Calendar
LocalDateTime相较于LocalDate、LocalTime,使用频率要高
实例化
1. now():获取当前的日期、时间、日期+时间
LocalDate localDate = LocalDate.now(); // 2021-02-02
LocalTime localTime = LocalTime.now(); //14:49:05.981
LocalDateTime localDateTime = LocalDateTime.now(); //2021-02-02T14:49:05.981
2. of():设置指定的年、月、日、时、分、秒。没有偏移量
LocalDateTime localDateTime1 = LocalDateTime.of(2020, 10, 6, 13, 23, 43); // 2020-10-06T13:23:43
方法
1. getXxx():获取相关的属性 (eg. 这个月的第几天)
System.out.println(localDateTime.getDayOfWeek()); //TUESDAY
System.out.println(localDateTime.getMonth()); //FEBRUARY
System.out.println(localDateTime.getMonthValue()); // 2
System.out.println(localDateTime.getMinute()); //49
2. withXxx():设置相关的属性(不可变性-有返回值接收)
LocalDate localDate1 = localDate.withDayOfMonth(22);
System.out.println(localDate); //2021-02-02
System.out.println(localDate1); //2021-02-22
3. plusXxx():将相关的属性加上几个数(不可变性-有返回值接收)
LocalDateTime localDateTime3 = localDateTime.plusMonths(3);
System.out.println(localDateTime); //2021-02-02T14:49:05.981
System.out.println(localDateTime3); //2021-05-02T14:49:05.981
4. minusXxx():将相关的属性减去几个数(不可变性-有返回值接收)
LocalDateTime localDateTime4 = localDateTime.minusDays(6);
System.out.println(localDateTime); //2021-02-02T14:49:05.981
System.out.println(localDateTime4); //2021-01-27T14:49:05.981
Instant 的使用
相当于java.util.Date类
实例化
1.Instant:now():获取本初子午线对应的标准时间
Instant instant = Instant.now();
System.out.println(instant); //2019-02-18T07:29:41.719Z (当前的本初子午线对应时间)
2. OffsetDateTime:Xxx.atOffset添加时间的偏移量 (改为所在地的时区)
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime); //2019-02-18T15:32:50.611+08:00
方法
1. toEpochMilli():获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数
相当于 Date类的getTime(),即时间戳
long milli = instant.toEpochMilli(); //1612250663726
2. ofEpochMilli():通过给定的毫秒数,获取Instant实例
相当于Date(long millis)
Instant instant1 = Instant.ofEpochMilli(1612250663726L);
System.out.println(instant1); //2021-02-02T07:24:23.726Z
DateTimeFormatter:格式化或解析日期、时间
类似于SimpleDateFormat
实例化和对应的格式化与解析
方式一:预定义的标准格式
实例化
ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
格式化:日期-->字符串
LocalDateTime localDateTime = LocalDateTime.now();
String str1 = formatter.format(localDateTime);
System.out.println(localDateTime);
System.out.println(str1);//2019-02-18T15:42:18.797
解析:字符串 -->日期
TemporalAccessor parse = formatter.parse("2019-02-18T15:42:18.797");
System.out.println(parse);
方式二:本地化相关的格式
实例化
ofLocalizedDateTime()
FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT :三种方式返回的格式不同
适用于LocalDateTime
DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
ofLocalizedDate()
FormatStyle.FULL / FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT : 同上
适用于LocalDate
格式化
第一种实例化(LocalDateTime)
String str2 = formatter1.format(localDateTime);
System.out.println(str2); //2019年2月18日 下午03时47分16秒
DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
第二种实例化(LocalDate)
String str3 = formatter2.format(LocalDate.now());
System.out.println(str3); //2019-2-18
方式三:自定义的格式 ⚠️
实例化
ofPattern(“yyyy-MM-dd hh:mm:ss”)
DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
格式化
String str4 = formatter3.format(LocalDateTime.now());
System.out.println(str4);//2019-02-18 03:52:09
解析
TemporalAccessor accessor = formatter3.parse("2019-02-18 03:52:09");
System.out.println(accessor);