前端的时间传到服务器,转换后的时间总是有差别,研究了一下,道理如下:
前端传入Date时间序列化以后,字符串一般有如下几种:
2018-10-30T15:22:30.293Z这是个Zulu也就是GMT(UTC)时区的时间,也叫世界标准时间,格林威治平均时。 2022-01-28T00:00:00+08:00这个是GMT+8(北京)时区的时间。 2022-01-28 00:00:00这个一般是自己序列化的格式时间,不含时区信息。
针对上述格式,后端会采用如下转换出Date来:
第一种:String value = "2018-10-30T15:22:30.293Z"; SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); df.setTimeZone(TimeZone.getTimeZone("GMT")); // 设置UTC时区 Date date = df.parse(value); // 这个转换出来就是对应本地时区的时间 第二种:String value = "2022-01-28T00:00:00+08:00"; SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX"); Date date = df.parse(value); // 这个转换出来就是对应本地时区的时间 第三种:String value = "2022-01-28 00:00:00"; // 前端本地时间是GMT+8,这里是个北京时间 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); df.setTimeZone(TimeZone.getTimeZone("GMT+8")); // 设置GMT+8时区 Date date = df.parse(value); // 这个转换出来就是对应本地时区的时间
以上转换可以使用Date.getTime()获取时间戳来验证,getTime()返回的时间戳是UTC时间。