众所周知,格式从前端提交到后端时,经常因为时间在不同平台上的不同格式而导致前端传后端时的各种报错,或者某一部分数据丢失等。
那有没有一种通用的时间格式呢?答案其实是有的,它就是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