MongoDB中的日期:将Date对象插入Mongo数据库时,日期比自身早1天

Tyl*_*归玉门 8 java jodatime instant mongodb

我的日期字符串格式是这样的:2012年1月2日 在Instant.parse()方法之后,即时实例成为2012年1月1日的日期,这是1天前,为什么?如果原始日期字符串是2012年1月1日,则Instant将是2011年12月31日.

String dateString="Jan 1, 2012";
Instant instant = Instant.parse(dateString, new DateTimeFormatterBuilder()
.appendMonthOfYearShortText()
.appendLiteral(" ")
.appendDayOfMonth(1)
.appendLiteral(", ")
.appendYear(4, 4)
.toFormatter());

DateTime dateTime = new DateTime(instant);
Date date = new Date(dateTime.getMillis());

document.append("time", new Date(dateTime.getMillis()));
tagsDbCollection.insert(document);
Run Code Online (Sandbox Code Playgroud)

我正在使用MongoDB来存储这些日期.我已经测试过,它显示格式化日期字符串 - >即时没有错误.但是当我将这个Date类型对象插入MongoDB时,MongoDB中的日期字符串变为提前1天.为什么?

在MongoDB中:

 /* 0 */
    {
      "_id" : ObjectId("50221a40da74d74053abb445"),
      "time" : ISODate("2011-12-31T14:00:00Z")
    }
Run Code Online (Sandbox Code Playgroud)

Ily*_*lya 1

final String dateString = "Jan 2, 2012";
final DateTimeFormatter dtf = new DateTimeFormatterBuilder().appendMonthOfYearShortText().appendLiteral(" ").appendDayOfMonth(1).appendLiteral(", ").appendYear(4, 4).toFormatter();
final DateTime jodaDate = dtf.parseDateTime(dateString);
System.out.println(jodaDate);
final Date javaDate = new Date(jodaDate.getMillis());
System.out.println(javaDate); 
Run Code Online (Sandbox Code Playgroud)

输出是

2012-01-02T00:00:00.000+02:00
Mon Jan 02 00:00:00 EET 2012  
Run Code Online (Sandbox Code Playgroud)

下一个:

final String dateString = "Jan 1, 2012";
Run Code Online (Sandbox Code Playgroud)

输出是:

2012-01-01T00:00:00.000+02:00
Sun Jan 01 00:00:00 EET 2012
Run Code Online (Sandbox Code Playgroud)