前端以json的格式 将时间 以年月日的形式传来后端
后端需要将年月日进行处理 以时间戳的形式存入到mongo中
例如:
- [
- {
- "categoryId": "1457211813719986177",
- "filter": "SPHC",
- "rate": 0.09,
- "siteId": "1457210664971423746",
- "startTimeDate": "2022-07-19 10:39"
- },
- {
- "categoryId": "1457211813719986177",
- "filter": "SPHC",
- "rate": 0.10,
- "siteId": "1457210664971423746",
- "startTimeDate": "2022-07-19 10:39"
- }
- ]
- /**
- * 开始时间
- */
- private Long startTime;
需要 我们在DTO层创建 LocalDateTime类型 用来接收前端传来的 年月日时间
- /**
- * 生效时间
- */
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GTM+8")
- @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
- @JsonSerialize(using = LocalDateTimeSerializer.class)
- @JsonDeserialize(using = LocalDateTimeDeserializer.class)
- private LocalDateTime startTimeDate;
@JsonFormat 用来表示json序列化的一种格式或者类型,主要有下面几个常用的属性
- @JsonFormat(shape = JsonFormat.Shape.ANY,locale = "zh_CN",pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT")
- private Date date;
shap: 表示序列化后的一种类型,默认为JsonFormat.Shape.ANY
pattern: 表示日期的格式,默认为序列化以后的格式,比如:2020-09-08T15:19:09.000+00:00
timezone: 默认是GMT,中国需要GMT+8
locale: 根据位置序列化的一种格式,默认为本地的语言简称,中国的语言简称为zh_CN
注意:@JsonFormat注解默认的时区为格林尼治时间,比中国时间(东八区是要小8个小时的)。

使用 @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) 使用iso属性即代表前端需要出入ISO标准时间
var date = new Date()
date.toISOString()
// 国际标准组织(ISO)格式,输出:‘2021-11-26T06:07:15.870Z’
date.toJson()
// 和上面的一致(ISO格式)。 输出:‘2021-11-26T06:07:15.870Z’
使用 @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocateDate date 使用ISO属性是传入的ISO标准的日期
var date = new Date()
date.format(“yyyy-MM-dd”);// “2021-11-26”
使用 @DateTimeFormat(iso = DateTimeFormat.ISO.Time) LocaDateTime dateTime 使用ISO属性是传入的ISO标准的日期
var date = new Date()
js将其格式化为 "01:30:00.000-05:00’
使用@DateTimeFormat(parttern=“yyyy-MM-dd”) 使用字符串格式化车成为日期。这里的parttern可以自定义成其他的类型
var date = new Date()js将其格式化为字符串 "yyyy-MM-dd"即可。
@JsonSerialize注解,可以实现date数据转换成long型数据等功能,该注解作用在属性的getter()方法上
用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点。因为在java中日期时期的时间戳是ms,我现在需要将ms转换为s,就需要将ms/1000
2. @JsonDeserialize:json反序列化注解,用于字段或set方法上,作用于setter()方法,将json数据反序列化为java对象。使用方法同@JsonSerialize类似。
- LocalDateTime dateTime =
- //年月日 进行处理 获取的年月日 的分后面默认为000
- LocalDateTime.of(renduiTaxRateDTO.getStartTimeDate().toLocalDate(),
- LocalTime.of(renduiTaxRateDTO.getStartTimeDate().getHour(),
- renduiTaxRateDTO.getStartTimeDate().getMinute(),0));
- //将年与日分秒 转换为时间戳 毫秒数
- renduiTaxRateDTO.setStartTime(dateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());
- Instant now = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8));
- System.out.println("秒数:"+now.getEpochSecond());
- System.out.println("毫秒数:"+now.toEpochMilli());
- 秒数:1539170157
- 毫秒数:1539170157886