专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

jdk8时间API(替代Date) jdk8时间操作

ins518 2024-10-09 16:25:02 技术文章 19 ℃ 0 评论


使用LocalDate、LocalTime、LocalDateTime而不是Date

先说说Date的缺点吧:

  • 使用SimpleDateFormat对Date时间进行格式化,但是SimpleDateFormat不是线程安全的。
  • Date对时间处理比较麻烦,想获取某年、某月、某星期,如果用Date来处理的话十分难做

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();  

修改LocalDate、LocalTime、LocalDateTime

LocalDate、LocalTime、LocalDateTime均为不可变对象,修改这些对象对象会返回一个副本,这一点编程规范在effective in java一书中有介绍。

  • 增加、减少年数、月数、天数等
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);  

格式化时间


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);  

并且DateTimeFormatter是线程安全的

SpringBoot中应用LocalDateTime

  • 将LocalDateTime字段以时间戳的方式返回给前端 添加日期转化类
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());  
    }  
}  

并在

LocalDateTime  

字段上添加

@JsonSerialize(using = LocalDateTimeConverter.class)  

注解,如下:

@JsonSerialize(using = LocalDateTimeConverter.class)  
protected LocalDateTime gmtModified;  
  • 将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;  
  • 对前端传入的日期进行格式化 在
LocalDateTime  

字段上添加

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")  

注解即可,如下:

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")  
protected LocalDateTime gmtModified;  

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表