8

2012 年 1 月 2 日Instant.parse () メソッドの後、インスタント インスタンスは 1 日早い 2012 年 1 月 1 日の日付になります。元の日付文字列が 2012 年 1 月 1 日である場合、インスタントは 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")
    }
4

3 に答える 3

1

Mongo は、Unix エポックからのミリ秒単位で日付を保存します。

参照: http://www.mongodb.org/display/DOCS/Dates

したがって、タイムゾーンはありません。ただし、コンソールを使用すると、.js パーサーが UTC 日付を現在のシステム タイム ゾーン設定に変換します。

次のことをテストできます。

  • いくつかの日付データを使用してエンティティを作成します。
  • 次に、コンソールを介してクエリを実行します。(String() を使用)
  • 次に、コンソールを終了し、システムのタイム ゾーンを再構成します (debian/ubuntu: sudo dpkg-reconfigure tzdata )。
  • 次に、コンソールを再度入力して古いデータをクエリします => 同じ UTC を取得しますが、toString() 出力は異なります
于 2012-08-08T14:24:50.703 に答える
0

UTCタイムゾーンを確認できます。基本的に、UTCタイムゾーンに応じて実行されているmongoサーバー

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); format.setTimeZone(TimeZone.getTimeZone("UTC"));

于 2016-06-30T08:15:12.827 に答える