Date和LocalDateTime转换
导包
import java.time.*;
import java.time.format.DateTimeFormatter;
以下是转化代码
一、Date转LocalDateTime
public static LocalDateTime toLocalDateTime(Date date) {
// 方法一
LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
// 方法二
return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
}
二、LocalDateTime转Date
public static Date toDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
三、时间字符串转LocalDateTime
/**
* date string to LocalDateTime
* @param dateStr eg: "2020-08-22 10:30:50"
* @param pattern eg: "yyyy-MM-dd HH:mm:ss"
* @return LocalDateTime
*/
public static LocalDateTime toLocalDateTime(String dateStr, String pattern) {
return LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern(pattern));
}
四、LocalDateTime转时间字符串
public static String localDateTimeToStr(LocalDateTime dateTime, String pattern) {
if (dateTime == null) {
return null;
}
return dateTime.format(DateTimeFormatter.ofPattern(StrUtil.isBlank(pattern) ? "yyyy-MM-dd HH:mm:ss" : pattern));
}
五、Date转OffsetDateTime
public static OffsetDateTime toOffsetDateTime(Date date) {
// 方法一
OffsetDateTime offsetDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toOffsetDateTime();
// 方法二
return ZonedDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).toOffsetDateTime();
}
// 测试
public static void test(){
OffsetDateTime offsetDateTime = toOffsetDateTime(new Date());
// 当前最后时间 23:59:59
OffsetDateTime with = offsetDateTime.with(LocalTime.MAX);
// 当前开始时间 00:00:00
OffsetDateTime endDateTime = offsetDateTime.with(LocalTime.MIN);
}
六、OffsetDateTime转Date
public static Date toDate(OffsetDateTime offsetDateTime){
return Date.from(offsetDateTime.atZoneSameInstant(ZoneId.systemDefault()).toInstant());
}
七、OffsetDateTime转LocalDateTime
public static LocalDateTime toLocalDateTime(OffsetDateTime offsetDateTime) {
return LocalDateTime.ofInstant(offsetDateTime.atZoneSameInstant(ZoneId.systemDefault()).toInstant(), ZoneId.systemDefault());
}
八、获取整点时间
/**
* 获取整点时间 示例:2020-10-28 10:18:32 返回 2020-10-28 10:00:00
* @param date the date
* @return the hour date time
*/
public static Date getHour(Date date) {
LocalDateTime dateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
return Date.from(LocalDateTime.of(dateTime.toLocalDate(), LocalTime.of(dateTime.getHour(), 0, 0)).atZone(ZoneId.systemDefault()).toInstant());
}
九、LocalDateTime 转 时间戳(秒级)
@Test
public void localTimeTest1(){
// 获得当前时间
LocalDateTime localDateTime = LocalDateTime.now();
// 将当前时间转为时间戳
long second = localDateTime.toEpochSecond(ZoneOffset.ofHours(8));
System.out.println(second);
}
@Test
public void localTimeTest2(){
// 获得当前时间
LocalDateTime localDateTime = LocalDateTime.now();
// 将当前时间转为时间戳
long second = localDateTime.toInstant(ZoneOffset.ofHours(8)).getEpochSecond();
System.out.println(second);
}
public void localTimeTest3() {
// 获得当前时间
LocalDateTime localDateTime = LocalDateTime.now();
// 将当前时间转为时间戳
long milliseconds = localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
System.out.println(milliseconds / 1000);
}
十、时间戳 转LocalDateTime
public void localTimeTest4() {
//获得时间戳
long second = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).getEpochSecond();
// 将时间戳转为当前时间
LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(second, 0, ZoneOffset.ofHours(8));
System.out.println(localDateTime);
}
public void localTimeTest5() {
//获得时间戳
long milliseconds = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
// 将时间戳转为当前时间
LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(milliseconds / 1000, 0, ZoneOffset.ofHours(8));
System.out.println(localDateTime);
}
public void localTimeTest6(){
//获得时间戳
long milliseconds = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
// 将时间戳转为当前时间
LocalDateTime localDateTime = Instant.ofEpochMilli(milliseconds).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
System.out.println(localDateTime);
}
十一、时间戳与LocalDate互转
1.时间戳转LocalDate
public void localDateTest1(){
//获得时间戳
long milliseconds = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
// 将时间戳转为当前时间
LocalDate localDate = Instant.ofEpochMilli(milliseconds).atZone(ZoneOffset.ofHours(8)).toLocalDate();
System.out.println(localDate);
}
public void localDateTest2(){
//获得时间戳
long seconds = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).getEpochSecond();
// 将时间戳转为当前时间
LocalDate localDate = Instant.ofEpochSecond(seconds).atZone(ZoneOffset.ofHours(8)).toLocalDate();
System.out.println(localDate);
}
2.LocalDate 转 时间戳
public void localDateTest3(){
LocalDate localDate = LocalDate.now();
//获得时间戳
long seconds = localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().getEpochSecond();
System.out.println(seconds);
}
public void localDateTest4(){
LocalDate localDate = LocalDate.now();
//获得时间戳
long seconds = localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();
System.out.println(seconds);
}
十二、时间格式化输出
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date time1;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime time2;
备注
1、LocalDateTime可以做日期的加减很方便
2、OffsetDateTime计算00:00:00及23:59:59很方便