首页 > 技术文章 > 关于JavaScript中moment.js或者day.js的时间格式转化进Java的LocalDateTime

Putinium 2020-09-02 14:41 原文

众所周知,格式从前端提交到后端时,经常因为时间在不同平台上的不同格式而导致前端传后端时的各种报错,或者某一部分数据丢失等。

那有没有一种通用的时间格式呢?答案其实是有的,它就是ISO-8601标准传输格式,它长的是这个样子的:2011-12-03T10:15:30+01:00,其中2011-12-03是日期,T10:15:30是时间,+01:00是时区,北京/重庆/香港/新加坡的时区是+08:00

 

ant.design中也是在使用的是moment.js,它可以很轻易地获取到上述ISO传输格式的时间。

可以在JavaScript中很容易地获得:

let mome = moment() //获取当前moment.js的时间类型, ant.design中的时间也是用的这种类型
let dateString = mome.format() //直接取成字符串,如2011-12-03T10:15:30+01:00

丢进Java中的控制层时直接用String来接收,然后再用LocalDateTime来把它格式成Java类型。

String str = "2011-12-03T10:15:30+01:00";
LocalDateTime.parse(str, DateTimeFormatter.ISO_OFFSET_DATE_TIME);

这样就可以在前后端轻松地传输时间格式了,日期、时间和时区都保留住了。

LocalDateTime是JDK1.8新增的API,对比陈旧的SimpleDateFormat,LocalDateTime是线程安全的。

 

参考:

JDK1.8源码:

java.time.LocalDateTime#parse(java.lang.CharSequence)

java.time.format.DateTimeFormatter#ISO_OFFSET_DATE_TIME

前端:

https://ant.design/components/date-picker-cn/

https://momentjs.com/

https://day.js.org/docs/zh-CN/display/format

 

推荐阅读