前言
目前接触的很多项目中基本都是使用JDK8及以上的Java版本开发。自JDK8提供了新的日期类:LocalTime、LocalDate 和 LocalDateTime,项目中经常出现旧的日期类Date和新版本日期类混合使用的情况,往往需要定制化实现日期类的转换。所以本文将做一次整理,将日期类之间常见的日期转换实现,封装成工具类,方便日后的项目开发。
代码实现
封装项目统一的日期工具类,代码如下(示例):
import java.sql.Timestamp;
import java.time.*;
import java.util.Date;
/**
* <p>
* LocalDate and LocalDateTime tools
* </p>
*/
public class LocalDateUtils {
private LocalDateUtils() {
}
/**
* Date to LocalDate
*
* @param date 日期
* @return {@link LocalDate}
*/
public static LocalDate covert2LocalDate(Date date) {
return Instant.ofEpochMilli(date.getTime())
.atZone(ZoneId.systemDefault())
.toLocalDate();
}
/**
* Date to LocalTime
*
* @param date 日期
* @return {@link LocalTime}
*/
public static LocalTime covert2LocalTime(Date date) {
return Instant.ofEpochMilli(date.getTime())
.atZone(ZoneId.systemDefault())
.toLocalTime();
}
/**
* Date to LocalDateTime
*
* @param date 日期
* @return {@link LocalDateTime}
*/
public static LocalDateTime covert2LocalDateTime(Date date) {
return Instant.ofEpochMilli(date.getTime())
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
}
/**
* milliseconds to LocalDateTime
*
* @param milliseconds milliseconds since January 1, 1970, 00:00:00 GMT.
* @return {@link LocalDateTime}
*/
public static LocalDateTime covert2LocalDateTime(long milliseconds) {
return new Timestamp(milliseconds).toLocalDateTime();
}
/**
* LocalDate to Date, init time at start of day
*
* @param date 日期
* @return {@link Date}
*/
public static Date covert2Date(LocalDate date) {
return Date.from(date.atStartOfDay()
.atZone(ZoneId.systemDefault())
.toInstant());
}
/**
* LocalTime to Date, init date on January 1, 1970
*
* @param date 日期
* @return {@link Date}
*/
public static Date covert2Date(LocalTime date) {
return Date.from(date.atDate(LocalDate.of(1970, 1, 1))
.atZone(ZoneId.systemDefault())
.toInstant());
}
/**
* LocalDateTime to Date
*
* @param date 日期
* @return {@link Date}
*/
public static Date covert2Date(LocalDateTime date) {
return Date.from(date.atZone(ZoneId.systemDefault())
.toInstant());
}
/**
* LocalDateTime to milliseconds
*
* @param date 日期
* @return {@link Date}
*/
public static long covert2Milliseconds(LocalDateTime date) {
Instant instant = date.atZone(ZoneId.systemDefault()).toInstant();
return instant.toEpochMilli();
}
/**
* LocalDate to milliseconds
*
* @param date 日期
* @return {@link Date}
*/
public static long covert2Milliseconds(LocalDate date) {
Instant instant = date.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
return instant.toEpochMilli();
}
/**
* LocalDateTime to seconds
*
* @param date 日期
* @return {@link Date}
*/
public static long covert2Seconds(LocalDateTime date) {
Instant instant = date.atZone(ZoneId.systemDefault()).toInstant();
return instant.getEpochSecond();
}
/**
* LocalDate to seconds
*
* @param date 日期
* @return {@link Date}
*/
public static long covert2Seconds(LocalDate date) {
Instant instant = date.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
return instant.getEpochSecond();
}
}
总结
以上就是Java8中日期类之间互转的内容,本文仅仅简单介绍了常用的时间戳、Date与LocalDate、LocalDateTime之间的转换,实际项目中可以根据需要,参考转换方法自定义更多转换实现。