您的位置:

Java中localdate转date的详细解读

一、localdate转date的区别

在Java中,LocalDate和Date都是处理日期的类,但它们有一些关键的区别。Java8引删了LocalDate(用以替代Calendar),是不变类型且线程安全的类,可以被广泛用于应用程序中表示日期。而Date是可变类型的类,它是线程不安全的,因此在多线程环境下使用需要考虑其同步问题。因此,在使用LocalDate和Date之间进行比较时,应该注意它们之间的区别。

二、localdate转datetime

在Java中,LocalDate是只处理日期的类,例如:年,月,日,hour,minute和second属性都是缺失的。如果想要同时具有日期和时间的信息,就需要使用LocalDateTime,它同时包含日期和时间的信息。


LocalDate date = LocalDate.now();
LocalDateTime dateTime = date.atTime(LocalTime.now());

三、localdatetime转localdate

如果只需要获取LocalDateTime中的日期信息,可以采用LocalDate的from()和toLocalDate()方法将其转换。


LocalDateTime dateTime = LocalDateTime.now();
LocalDate date = LocalDate.from(dateTime);
or 
LocalDate date = dateTime.toLocalDate();

四、LocalDate转Date 1900年误差

由于Java Date类的构造函数中使用的年份是从1900年作为基准的,而LocalDate的年份是直接使用的,因此在将LocalDate转化为Date时,可能存在误差。


LocalDate localDate = LocalDate.now();
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

五、Date转LocalDate

Java中,可以通过将Date转换为Instant,然后利用Instant对象调用atZone(),从而获取对应的ZoneId,最后通过调用toLocalDate()方法,将Date转换为LocalDate。


Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

六、String转LocalDate

在Java中,我们可以使用DateTimeFormatter类将String类型的日期格式化为LocalDate。


String strDate = "2022-11-11";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(strDate, formatter);

七、LocalDate转化为Date

在Java中,我们可以使用Instant对象调用atZone()方法获取对应的ZoneId,最后通过调用Date.from()方法将LocalDate转换为Date。


LocalDate localDate = LocalDate.now();
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

八、LocalDateTime转Date

我们可以采用同样的方法将LocalDateTime转换为Date类型。


LocalDateTime localDateTime = LocalDateTime.now();
Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());

九、LocalDate获取时间戳

Java中,LocalDate并没有时间戳的概念,所以获取时间戳需要将其转换为LocalDateTime或者Instant,在获取对应的时间戳。


LocalDate localDate = LocalDate.now();
LocalDateTime localDateTime = localDate.atStartOfDay();
long timestamp1 = localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
long timestamp2 = localDate.atStartOfDay(ZoneId.systemDefault()).toEpochSecond();

十、Date设置时间格式

在Java中,Date有一个toLocalDate()方法,该方法可以返回LocalDate类型,从而可以使用LocalDate的DateTimeFormatter进行格式化。


Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
String strDate = localDate.format(formatter);