背景知识
GMT是格林威治时间
CST 是北京标准时间, CST比GMT早8个小时。 一些工具类在格式化日期,会把日期转化成GMT时间再格式化。
使用jackson序列化日期存到cache中, 然后反序列回来, 发现反序列化后的日期比序列化时要小
1, 从数据库查到日期后, 默认是CST时区的,
2, 如果不设置, jackson 会默认把日期转化成 GMT时区对应的日期, 然后序列化成对应的字符串
3, 这样序列化后的日期字符串丢失了时区信息, 得到的日期字符串也不是我们想要的日期字符串了
4, 如果自定义了日期反序列化方式, 反序列化的时候会取系统默认的时区,也就是GMT时区,这时候日期就和序列化时不一致了
总结:
日期的序列化和反序列化时需要注意时区的设置, 如果设置了序列化日期, 在反序列化, 务必保证两次的时区一致
取时间戳计算后再根据时间戳创建时间比预期时间要快8小时 ?
问题代码:
以下算时间有问题吗, 有问题, 算出来的是GMT 0点的时间戳. 转换成CST就是 8:00了
1 | /** |