mongoDB对时间的处理ISODate与我们时区相差8小时
来源:互联网 发布:手机淘宝怎么获得积分 编辑:程序博客网 时间:2024/05/16 10:51
mongoDB对时间的处理ISODate与我们时区相差8小时
原数据为:
Person [id=11188, name=doctorwho, age=888888,birth=2016-01-01 13:55:00]
{ "_id" : "11188", "_class" : "com.doctor.domain.Person", "name" : "doctorwho", "age" : NumberInt(888888), "birth" : ISODate("2016-01-01T05:55:00.000+0000")}
那我们用时间查询数据的时候,看下java 驱动如何做的:(部分日志):
package com.doctor.springdoc;import java.time.LocalDateTime;import java.time.ZoneId;import java.time.ZonedDateTime;import java.util.Date;import java.util.List;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.data.mongodb.core.query.Criteria;import org.springframework.data.mongodb.core.query.Query;import org.springframework.data.mongodb.core.query.Update;import com.doctor.domain.Person;import com.mongodb.WriteResult;/** * JSONSerializers L205-216有关mongoDB对时间的处理ISODate与我们时区相差8小时(做个时区转换) * * @author sdcuike * * @time 2015年12月27日 下午10:54:16 */public class SavingUpdatingRemovingDocuments { /** * @param args */ public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:/mongoDBConfig/spring-mongoDB.xml"); MongoTemplate mongoTemplate = context.getBean(MongoTemplate.class); Person person = new Person("doctorwho", 28888, "11188"); LocalDateTime localDateTime = LocalDateTime.of(2016, 1, 1, 13, 55); ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("Asia/Shanghai")); person.setBirth(Date.from(zonedDateTime.toInstant())); System.out.println(person); if (mongoTemplate.findById(person.getId(), Person.class) == null) { mongoTemplate.insert(person); } Person findById = mongoTemplate.findById(person.getId(), Person.class); System.out.println(findById); List<Person> find = mongoTemplate.find(Query.query(Criteria.where("name").is("doctorwho").and("age").is(28888)), Person.class); find.forEach(System.out::println); WriteResult updateMulti = mongoTemplate.updateMulti(Query.query(Criteria.where("age").is(28888)), Update.update("age", 888888), Person.class); System.out.println(updateMulti.getN()); System.out.println("time query"); List<Person> find2 = mongoTemplate.find(Query.query(Criteria.where("birth").is(person.getBirth())), Person.class); find2.forEach(System.out::println); // JSONSerializers L205-216有关mongoDB对时间的处理ISODate与我们时区相差8小时(做个时区转换) }}
time query
01-02 22:12:37.195 main DEBUG org.springframework.data.mongodb.core.MongoTemplate - find using query: { "birth" : { "$date" : "2016-01-01T05:55:00.000Z"}} fields: null for class: class com.doctor.domain.Person in collection: person
01-02 22:12:37.196 main DEBUG org.springframework.data.mongodb.core.MongoDbUtils - Getting Mongo Database name=[sdcuike]
Person [id=11188, name=doctorwho, age=888888,birth=2016-01-01 13:55:00]
{ "birth" : { "$date" : "2016-01-01T05:55:00.000Z"}}查询语句按我们的相差时间查询,返回的数据确实是我们需要的,即使数据库中我们看到的iso date相差8个小时。其实java 驱动帮我们做了转换。
com.mongodb.util.JSONSerializers.LegacyDateSerializer代码:
private static class LegacyDateSerializer extends CompoundObjectSerializer { LegacyDateSerializer(ObjectSerializer serializer) { super(serializer); } @Override public void serialize(Object obj, StringBuilder buf) { Date d = (Date) obj; SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); format.setCalendar(new GregorianCalendar( new SimpleTimeZone(0, "GMT"))); serializer.serialize( new BasicDBObject("$date", format.format(d)), buf); } }
在这里,做了时区转换。
GregorianCalendar
- mongoDB对时间的处理ISODate与我们时区相差8小时
- 关于 django 的时区设置与MySQL 时间相差8小时
- 处理时间相差8个小时的方法
- jdk时区相差8小时
- jdk时区相差8小时 .
- jdk时区相差8小时
- jdk时区相差8小时 .
- mongodb 中date 类型的处理:ISODate
- 解决weblogic与系统时间相差8小时的问题
- 解决weblogic与系统时间相差8小时的问题
- 解决weblogic与系统时间相差8小时的问题
- 解决weblogic与系统时间相差8小时的问题
- 解决时间相差8小时 && 与当前时间相差n个月、n天的代码
- ubuntu的JDK时区与北京时间相差8个小时(Tomcat、Spring)
- 时间相差8小时
- XAMPP下更改时区或者时间与本地时间相差固定小时
- java new date 结果与操作系统时间相差8小时处理解决方法
- CentOS系统时间与现在时间相差8小时解决方法
- spring bean的配置(一)
- iOS UIImage类方法总结
- ubuntu 安装pip
- 集群单节点任务Failover
- sqlite数据库基础语句
- mongoDB对时间的处理ISODate与我们时区相差8小时
- (java多线程并发)concurrent包的实现
- Product of Array Except Self
- RUP(Rational Unified Process)
- static & extern 全局变量 局部变量...
- tyvj1039忠诚2
- Centos7中安装hadoop-1.2.1
- 策略模式(Strategy Pattern)
- 欢迎使用CSDN-markdown编辑器