阿里云服务器ECS    
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新 [咨询更多]
阿里云存储OSS
简单易用、多重冗余、数据备份高可靠、多层次安全防护安全性更强、低成本 [咨询更多]
阿里云数据库RDS
稳定可靠、可弹性伸缩、更拥有容灾、备份、恢复、监控、迁移等方面的全套解决方案 [咨询更多]
阿里云安全产品
DDoS高防IP、web应用防火墙、安骑士、sll证书、态势感知众多阿里云安全产品热销中 [咨询更多]
阿里云折扣优惠    
云服务器ECS、数据库、负载均衡等产品新购、续费、升级联系客服获取更多专属折扣 [咨询更多]
Come On,一起使用java8全新的日期和时间API
2020-6-18    点击量:
  Come On,一起使用java8全新的日期和时间API
  
  LocalDate
  
  只会获取年月日
  
  创建LocalDate
  
  //获取当前年月日
  
  LocalDate localDate = LocalDate.now();
  
  //构造指定的年月日
  
  LocalDate localDate1 = LocalDate.of(2019, 9, 10);

  
  获取年、月、日、星期几
  
  int year = localDate.getYear();
  
  int year1 = localDate.get(ChronoField.YEAR);
  
  Month month = localDate.getMonth();
  
  int month1 = localDate.get(ChronoField.MONTH_OF_YEAR);
  
  int day = localDate.getDayOfMonth();
  
  int day1 = localDate.get(ChronoField.DAY_OF_MONTH);
  
  DayOfWeek dayOfWeek = localDate.getDayOfWeek();
  
  int dayOfWeek1 = localDate.get(ChronoField.DAY_OF_WEEK);
  
  LocalTime

  
  只会获取几点几分几秒
  
  创建LocalTime
  
  LocalTime localTime = LocalTime.of(13, 51, 10);
  
  LocalTime localTime1 = LocalTime.now();

  
  获取时分秒
  
  //获取小时
  
  int hour = localTime.getHour();
  
  int hour1 = localTime.get(ChronoField.HOUR_OF_DAY);
  
  //获取分
  
  int minute = localTime.getMinute();
  
  int minute1 = localTime.get(ChronoField.MINUTE_OF_HOUR);
  
  //获取秒
  
  int second = localTime.getSecond();
  
  int second1 = localTime.get(ChronoField.SECOND_OF_MINUTE);

  
  LocalDateTime
  
  获取年月日时分秒,等于LocalDate+LocalTime
  
  创建LocalDateTime
  
  LocalDateTime localDateTime = LocalDateTime.now();
  
  LocalDateTime localDateTime1 = LocalDateTime.of(2019, Month.SEPTEMBER, 10, 14, 46, 56);
  
  LocalDateTime localDateTime2 = LocalDateTime.of(localDate, localTime);
  
  LocalDateTime localDateTime3 = localDate.atTime(localTime);
  
  LocalDateTime localDateTime4 = localTime.atDate(localDate);

  
  获取LocalDate
  
  LocalDate localDate2 = localDateTime.toLocalDate();
  
  获取LocalTime
  
  LocalTime localTime2 = localDateTime.toLocalTime();
  
  **Instant**
  
  获取秒数
  
  - 创建Instant对象

  
  Instant instant = Instant.now();
  
  - 获取秒数
  
  long currentSecond = instant.getEpochSecond();
  
  - 获取毫秒数
  
  long currentMilli = instant.toEpochMilli();
  
  个人觉得如果只是为了获取秒数或者毫秒数,使用System.currentTimeMillis()来得更为方便
  
  修改LocalDate、LocalTime、LocalDateTime、Instant
  
  LocalDate、LocalTime、LocalDateTime、Instant为不可变对象,修改这些对象对象会返回一个副本
  
  - 增加、减少年数、月数、天数等 以LocalDateTime为例
  

  LocalDateTime localDateTime = LocalDateTime.of(2019, Month.SEPTEMBER, 10,
  
  14, 46, 56);
  
  //增加一年
  
  localDateTime = localDateTime.plusYears(1);
  
  localDateTime = localDateTime.plus(1, ChronoUnit.YEARS);
  
  //减少一个月
  
  localDateTime = localDateTime.minusMonths(1);
  
  localDateTime = localDateTime.minus(1, ChronoUnit.MONTHS);
  
  - 通过with修改某些值
  
  //修改年为2019
  
  localDateTime = localDateTime.withYear(2020);
  
  //修改为2022
  
  localDateTime = localDateTime.with(ChronoField.YEAR, 2022);
  
  还可以修改月、日 时间计算
  
  比如有些时候想知道这个月的最后一天是几号、下个周末是几号,通过提供的时间和日期API可以很快得到答案

  
  LocalDate localDate = LocalDate.now();
  
  LocalDate localDate1 = localDate.with(firstDayOfYear());
  
  比如通过firstDayOfYear()返回了当前日期的第一天日期,还有很多方法这里不在举例说明
  
  **格式化时间**

  
  LocalDate localDate = LocalDate.of(2019, 9, 10);
  
  String s1 = localDate.format(DateTimeFormatter.BASIC_ISO_DATE);
  
  String s2 = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
  
  //自定义格式化
  
  DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
  
  String s3 = localDate.format(dateTimeFormatter);
  
  DateTimeFormatter默认提供了多种格式化方式,如果默认提供的不能满足要求,可以通过DateTimeFormatter的ofPattern方法创建自定义格式化方式
  
  **解析时间**

  
  LocalDate localDate1 = LocalDate.parse("20190910", DateTimeFormatter.BASIC_ISO_DATE);
  
  LocalDate localDate2 = LocalDate.parse("2019-09-10", DateTimeFormatter.ISO_LOCAL_DATE);
  
  和SimpleDateFormat相比,DateTimeFormatter是线程安全的
  
  **小结**
  
  LocalDateTime:Date有的我都有,Date没有的我也有,日期选择请Pick Me。
  
  SpringBoot中应用LocalDateTime
  
  1.将LocalDateTime字段以时间戳的方式返回给前端
  
  添加日期转化类

  
  public class LocalDateTimeConverter extends JsonSerializer {
  
  @Override
  
  public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
  
  gen.writeNumber(value.toInstant(ZoneOffset.of("+8")).toEpochMilli());
  
  }

  
  }
  
  并在LocalDateTime字段上添加@JsonSerialize(using = LocalDateTimeConverter.class)注解,如下:
  
  @JsonSerialize(using = LocalDateTimeConverter.class)
  
  protected LocalDateTime gmtModified;
  
  2.将LocalDateTime字段以指定格式化日期的方式返回给前端
  
  在LocalDateTime字段上添加@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")注解即可,如下:

  
  @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")
  
  protected LocalDateTime gmtModified;
  
  3.对前端传入的日期进行格式化
  
  在LocalDateTime字段上添加@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")注解即可,如下:

  
  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  
  protected LocalDateTime gmtModified
联系客服免费领取更多阿里云产品新购、续费升级折扣,叠加官网活动折上折更优惠