2022/7/20 LocalDateTime将年月日转化为时间戳

一.详细 需求

前端以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


版权声明:本文为weixin_44021708原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。