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


    一.详细 需求

    前端以json的格式 将时间 以年月日的形式传来后端

    后端需要将年月日进行处理 以时间戳的形式存入到mongo中

    例如:

    1. [
    2. {
    3. "categoryId": "1457211813719986177",
    4. "filter": "SPHC",
    5. "rate": 0.09,
    6. "siteId": "1457210664971423746",
    7. "startTimeDate": "2022-07-19 10:39"
    8. },
    9. {
    10. "categoryId": "1457211813719986177",
    11. "filter": "SPHC",
    12. "rate": 0.10,
    13. "siteId": "1457210664971423746",
    14. "startTimeDate": "2022-07-19 10:39"
    15. }
    16. ]

    二 .后端接收的方式 是long类型

    1. /**
    2. * 开始时间
    3. */
    4. private Long startTime;

    需要 我们在DTO层创建 LocalDateTime类型 用来接收前端传来的 年月日时间

    1. /**
    2. * 生效时间
    3. */
    4. @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GTM+8")
    5. @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    6. @JsonSerialize(using = LocalDateTimeSerializer.class)
    7. @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    8. private LocalDateTime startTimeDate;

    @JsonFormat注解用法

    @JsonFormat 用来表示json序列化的一种格式或者类型,主要有下面几个常用的属性

    1. @JsonFormat(shape = JsonFormat.Shape.ANY,locale = "zh_CN",pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT")
    2. 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类似。

    三 将年月日  做处理 改成时间戳

    1. LocalDateTime dateTime =
    2. //年月日 进行处理 获取的年月日 的分后面默认为000
    3. LocalDateTime.of(renduiTaxRateDTO.getStartTimeDate().toLocalDate(),
    4. LocalTime.of(renduiTaxRateDTO.getStartTimeDate().getHour(),
    5. renduiTaxRateDTO.getStartTimeDate().getMinute(),0));
    6. //将年与日分秒 转换为时间戳 毫秒数
    7. renduiTaxRateDTO.setStartTime(dateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());
    1. Instant now = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8));
    2. System.out.println("秒数:"+now.getEpochSecond());
    3. System.out.println("毫秒数:"+now.toEpochMilli());
    1. 秒数:1539170157
    2. 毫秒数:1539170157886

  • 相关阅读:
    通过CRM软件系统赢得销售机会的五大原则
    信创服务器操作系统的适配迁移分析
    【每日一题】445. 两数相加 II
    大数据ClickHouse进阶(四):ClickHouse的索引深入了解
    MySQL——GROUP BY详解与优化
    BetterDisplay Pro v2.0.11(显示器颜色校准软件)
    微信小程序 | 微信公众平台SpringBoot开发实例 │ 模板消息的应用开发
    Kotlin的对象表达式(Object expressions)
    fastapi 基本介绍+使用
    狂神说Go语言学习笔记(一)
  • 原文地址:https://blog.csdn.net/weixin_44021708/article/details/125885214