mongo保存日期是一个64-bit整形数。java driver保存Date时会把他自动转换为标准时间GMT。如中国在GMT+8时区,保存2012-01-20 00:00:00到库中,查询后结果竟然是2012-01-19 16:00:00跟想要结果不一致。可以在com.mongodb.util.JSON找到问题根源:
if (o instanceof Date) {
Date d = (Date) o;
SimpleDateFormat format =
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
format.setCalendar(new GregorianCalendar(new SimpleTimeZone(0, "GMT")));
serialize(new BasicDBObject("$date", format.format(d)), buf);
return;
}
找到问就好办,自己完成日期的转换:
SimpleDateFormat
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
format.setCalendar(new GregorianCalendar(new SimpleTimeZone(0, "GMT")));
Date date = format.parse("2012-01-20 00:00:00");
date日期变成2012-01-20 08:00:00+08也就是在GMT+8时区下自动加8个小时。
本文探讨了MongoDB保存日期为64-bit整形数时与Java驱动自动转换为标准时间GMT的冲突,导致日期显示错误。通过自定义日期转换方式,解决了日期在不同时区显示不一致的问题。
2648

被折叠的 条评论
为什么被折叠?



