一.详细 需求
前端以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"
}
]
二 .后端接收的方式 是long类型
/**
* 开始时间
*/
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注解用法
@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
使用 @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
@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