我使用java(IDE是eclipse)来查询mongodb。下面是我的java代码:
DBObject query = new BasicDBObject();
ObjectId id =new ObjectId("529f280b90ee58cb7732c2b8");
query.put("_id", id);
DBCursor cursor = collection.find(query);
while(cursor.hasNext()) {
DBObject object = (DBObject)(cursor.next());
System.out.println(object.get("_id"));
System.out.println(object.get("createDate"));
}在createDate中发生了问题,其类型为ISODate,值为ISODate("2013-10-21T01:34:04.808Z"),但我的代码的println结果是'Mon Oct 21 **09**:34:04 CST 2013',时间从01改为09。我不知道发生了什么!
有人能帮忙吗?
发布于 2014-01-06 05:31:46
时间并没有改变。你一定是在中国,考虑到你的例子中的"CST“和8小时的差别。如果您将"CST“解释为"中国标准时间”(而不是在美国的中央标准时间 ),那么您的时区将比UTC/GMT提前8小时。所以当时间是凌晨1点时,台北墙上的钟会在同一时刻读"9点“。
次要问题:时区的三个字母代码已经过时,应该避免使用.它们既不标准化,也不独特。使用适当时区名称。
要点:问题在于如何从表示日期时间的MongoDB中提取值。
我不知道MongoDB,他们的医生也很困惑,所以我不能再帮你了。如果您可以检索第一个示例中看到的ISO 8601字符串,那么这比第二个示例的格式要好得多。
如果您想使用Java中的日期时间值,可以直接将一个ISO8601字符串提供给尤达-时间 2.3中的尤达-时间构造函数。
DateTime dateTime = new DateTime( "2013-10-21T01:34:04.808Z" );更新
这位医生说MongoDB的Java驱动程序将为您提供一个java.util.Date对象。这就解释了你的问题。与java.util.Date捆绑在一起的java.util.Date& Calendar类非常糟糕。一个问题是,虽然日期实例没有时区,但它的toString()方法使用JVM的默认时区来呈现字符串。Date的toString方法使用这种可怕的模棱两可的格式。
您应该避免使用java.util.Date & Calendar类。现在使用尤达-时间库。在Java8中,您可以使用新的类。
您可以在java.util.Date和Joda-Time之间来回转换。将日期实例传递给Joda-Time构造函数。回到过去,打电话给Joda-Time toDate()格式。
注意,虽然java.util.Date中没有时区信息,但DateTime对象确实分配了时区。如果您需要UTC/GMT,请指定DateTimeZone.UTC。
您的代码应该更像:
java.util.Date date = object.get("createDate");
DateTime createDateTime = new DateTime( date, DateTimeZone.forId( "Asia/Manila" ) );
System.out.println( createDateTime );
… do some work …
java.util.Date dateGoingBackToMongoDB = createDateTime.toDate();https://stackoverflow.com/questions/20941687
复制相似问题