问题描述

前端操作的时间类型一般为Date类型(不是Java的Date类型),而Java则为LocalDateTime类型

前端的时间传到后端保存到数据库需要先转换成LocalDateTime类型,后端的时间显示到前端则需要转换成前端的Date类型

解决办法

前端的Date类型转换成后端的LocalDateTime类型

首先根据前端的Date类型获得对应的时间戳(单位为秒),后端将时间戳转换成LocalDateTime类型

后端的LocalDateTime类型转换成前端的Date类型

首先根据后端的LocalDateTime类型获得对应的时间戳(单位为秒),前端再将前面的秒时间戳转换成毫秒时间戳(秒时间戳×1000),最后将毫秒时间戳转换成前端的Date类型

代码实现

Date类型转换成LocalDateTime类型

前端获得当前时间的秒时间戳,下面的getTime()获得的时间戳单位为毫秒,所以要除以1000,小数部分则通过Math.floor()舍去

1
const timestampSeconds = Math.floor(new Date().getTime()/1000)

后端将秒时间戳转换成LocalDateTime类型

1
2
3
4
5
6
7
8
9
10
11
12
/**
* 前端的new Date()转换的时间戳(秒) 转换成 LocalDateTime
*
* @param timestampSeconds
* @return
*/
public static LocalDateTime timestampSecondsChangeToLocalDateTime(long timestampSeconds) {

Instant instant = Instant.ofEpochSecond(timestampSeconds);
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant, ZoneId.of("UTC+8"));
return zonedDateTime.toLocalDateTime();
}

LocalDateTime类型转换成Date类型

后端获得当前时间的秒时间戳

1
2
3
4
5
6
7
8
9
/**
* 将LocalDateTime转换成时间戳(秒)
*
* @param localDateTime
* @return
*/
public static long localDateTimeChangeToTimestampSeconds(LocalDateTime localDateTime) {
return localDateTime.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
}

前端将秒时间戳转换成毫秒时间戳,再转换成Date类型,timestampSeconds为秒时间戳

1
var date = new Date(timestampSeconds*1000)