当前位置: 首页 > 面试题库 >

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

岳鸿畴
2023-03-14
问题内容

我的日期字符串格式如下: 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);

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

在MongoDB中:

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

问题答案:
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);

输出为

2012-01-02T00:00:00.000+02:00
Mon Jan 02 00:00:00 EET 2012

下一步:

final String dateString = "Jan 1, 2012";

输出为:

2012-01-01T00:00:00.000+02:00
Sun Jan 01 00:00:00 EET 2012


 类似资料:
  • 问题内容: 我需要找出一种将带有字段的记录插入数据库的方法,但我陷入了困境。 有谁知道我该怎么做?现在我有类似的东西。 但是,当我运行类似这样的命令时,出现错误:值的字符串表示形式的语法不正确。 这是sql语句的样子: 谢谢 问题答案: 当然,这将使你的代码更好,但是要回答你的问题,你需要告诉的字符串表示形式。在中(你不指定数据库供应商的名称),使用以下函数将字符串日期转换为:

  • 问题内容: 我有一个关于将PHP中的日期插入Oracle DB的问题 所以我在PHP中有这个 问题是,我没有在数据库中插入任何新记录。DELIVERY_DATE的数据类型是 问题答案: 几天前,我遇到了同样的问题,这是日期格式问题。所以我更改了日期格式,它对我有用。您可以尝试下面的代码并对其进行测试,如果它可以工作,则可以根据需要修改代码。

  • 问题内容: 我现在有一个奇怪的问题。当我将今天的日期插入数据库时​​,它映射到昨天的日期,它随每个日期发生。例如,当我尝试插入2016-09-02时,数据库将其另存为2016-09-01。这是我的映射: 我创建实例是通过 尝试在控制台上将值保存到数据库中之前打印出来的,并且它可以正确打印出来,但是数据库中的值是从前一天开始的://因此问题出在hibernate映射还是mysql。我用这种方法将日期

  • 代码: 输出:(增加空白行以提高可读性) 有两件事我不明白: null 我还查看了date.equals()的实现: 那么,为什么返回false,尽管为两个对象都返回了1406498400000? 参考:http://docs.oracle.com/javase/7/docs/api/java/util/date.html#equals(java.lang.object)

  • 问题内容: 我对约会有点困惑。我目前正在使用天气应用程序,并且一切正常。.我只是想将这种类型的格式处理成我自己想要的格式。 我只是想将此日期转换为大纪元时间,然后以所需的格式结算日期:: 对于J-SON 或者我想将此日期转换为更少的数字,例如,Sun,9月9日9:23 Am等。 http://dataservice.accuweather.com/currentconditions/v1/2570

  • 问题内容: 当比较Javascript中的日期对象时,我发现即使比较同一日期也不会返回true。 我如何比较这些日期的相等性?我对利用JS 的本机对象(而不是任何第三方库)感兴趣,因为它不适合仅使用第三方JS来比较日期。 问题答案: 这是因为在第二种情况下,将比较实际的日期对象,并且两个对象永远不会彼此相等。强迫他们编号: 如果要更明确地转换为数字,请使用以下任一方法: 要么 哦,对规范的引用:§