Instant :瞬时实例LocalDate :本地日期,不包含具体时间。例如:2014-01-14可以用来记录生日、纪念日、加盟日等。LocalTime :本地时间,不包含日期LocalDateTime :组合了日期和时间,但不包含时差和时区信息ZonedDateTime :最完整的日期时间,包含时区和相对UTC或格林威治的时差
获取当前时间:LocalDateTime.now();
日期格式化:1 2 3 4 5 6 7 DateTimeFormatter默认提供了多种格式化方式: LocalDate localDate = LocalDate.of(2019 , 9 , 10 ); String s1 = localDate.format(DateTimeFormatter.BASIC_ISO_DATE); String s2 = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE); 如果默认提供的不能满足要求,可以通过DateTimeFormatter的ofPattern方法创建自定义格式化方式 LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss a" ));
3.解析时间
1 2 LocalDate localDate1 = LocalDate.parse("20190910" , DateTimeFormatter.BASIC_ISO_DATE); LocalDate localDate2 = LocalDate.parse("2019-09-10" , DateTimeFormatter.ISO_LOCAL_DATE);
获取时间戳:Instant.now().toEpochMilli()
Instant.now()
(获取的是格林威治时间/世界时) (Date.from(Instant)
将Instant转换成java.util.Date,Date.toInstant()
则是将Date类转换成Instant类。)
LocalDateTime转String: LocalDateTime.parse(str,dateTimeFormatter);
String转LocalDateTime: localDateTime.format(dateTimeFormatter);
Date转LocalDateTime:LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
LocalDateTime转Date:Date date = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());
LocalDate转LocalDateTime:LocalDateTime.of(LocalDate.parse("2021-01-08", DateTimeFormatter.ofPattern("yyyy-MM-dd")),LocalTime.MIN)
LocalDateTime转LocalDate:localDateTime.toLocalDate()
前端传过来的日期字符串怎么转换并放到数据库
获取某天的最开始那一秒(最开始时间):LocalDateTime.of(oneDayLocalDate,LocalTime.MIN)
通过with
修改某些值
1 2 3 4 localDateTime = localDateTime.withYear(2020 ); localDateTime = localDateTime.with(ChronoField.YEAR, 2022 );
通过自定义数据类型转换器返回时间戳给前端
1 2 3 4 5 6 7 8 9 10 11 12 public class LocalDateTimeConverter extends JsonSerializer <LocalDateTime> { @Override public void serialize (LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeNumber(value.toInstant(ZoneOffset.of("+8" )).toEpochMilli()); } } @JsonSerialize(using = LocalDateTimeConverter.class)
一些例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 LocalDate localDate = LocalDate.now(); System.out.println("LocalDate.now():" +localDate); System.out.println("localDate.getYear():" +localDate.getYear()); System.out.println("localDate.getMonth():" +localDate.getMonth()); System.out.println("localDate.getMonthValue():" +localDate.getMonthValue()); System.out.println("localDate.getDayOfMonth():" +localDate.getDayOfMonth()); System.out.println("localDate.getDayOfWeek():" +localDate.getDayOfWeek()); System.out.println("localDate.getDayOfWeek().getValue():" +localDate.getDayOfWeek().getValue()); LocalTime localTime = LocalTime.now(); System.out.println("当前时间LocalTime.now(): " + localTime); System.out.println("当前时间+1小时 localTime.plusHours(1): " + localTime.plusHours(1 )); System.out.println("当前时间-1小时 localTime.plusHours(1): " + localTime.minusHours(1 )); Clock clock = Clock.systemUTC(); Clock clock2 = Clock.systemDefaultZone(); System.out.println("Clock : " + clock.millis()); System.out.println("clock2 : " + clock2.millis()); System.out.println("= 获取当前的时间戳 =" ); Instant timestamp = Instant.now(); System.out.println("获取当前的时间戳: " +timestamp); System.out.println("= 格式化日期 =" ); DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss a" ); LocalDateTime localDateTime = LocalDateTime.now(); System.out.println(" LocalDateTime.now(): " +localDateTime); System.out.println(" 格式化后的日期:" +localDateTime.format(format)); System.out.println("= 检查生日等周期性事件 =" ); LocalDate dateOfBirth = LocalDate.of(2019 , 7 , 25 ); MonthDay birthday = MonthDay.of(dateOfBirth.getMonth(), dateOfBirth.getDayOfMonth()); MonthDay currentMonthDay = MonthDay.from(localDate); if (currentMonthDay.equals(birthday)){ System.out.println(" Many Many happy returns of the day !!" ); }else { System.out.println(" Sorry, today is not your birthday" ); }