1

Mongoコレクションにさまざまなタイムスタンプが保存されています。一部はfloatとして、一部はintとして保存されています。

それらはすべてBSTに保存され、サーバーはまもなくUTCに切り替えられます。Mongo内でそれらをUTCタイムスタンプに変換するにはどうすればよいですか?

MySQLではこれを行うことができます:

UPDATE `table` SET `field` = CONVERT_TZ(`field`, 'Europe/London', 'UTC');

モンゴに相当するものはありますか?

4

3 に答える 3

1

選択した言語を使用して、一度に1つずつ更新する必要があります。forデータをロードして再書き込みするループのように単純である必要があります。

選択した言語がタイムゾーン全体のタイムスタンプをどのように処理するかを再確認してください。このようなデータ変更を行うと、本番コードにあらゆる種類の予期しない影響を与える可能性があります。

于 2011-07-14T05:00:49.880 に答える
-1

タイムスタンプは通常UTCであり、特定のタイムゾーンではありません。私が使用したすべての日付/時刻ライブラリは、1970年1月1日UTCからの秒数(またはミリ秒)のタイムスタンプを返します。タイムスタンプの作成に使用したライブラリのドキュメントを確認してください。

これは、この規則に従わない日付/時刻ライブラリを使用した場合、または何らかの方法でタイムスタンプを自分で計算してタイムゾーンを考慮した場合を除いて、問題がないことを意味します。

たとえば、JavaScriptでは、返された値を保存しnew Date().getTime()、後でその値をnew Date(...)別のシステムに渡すと、2つのシステムのタイムゾーンに関係なく、同じ絶対日付/時刻になります。同じことがRubyにも当てはまり、Time.new.to_iあるマシンで実行Time.at(...)し、別のマシンで実行すると、同じ絶対日時が得られます。「絶対日付/時刻」とは、UTC時刻が同じになることを意味します。ほとんどの場合、システムはローカルタイムゾーンで表示しますが、それが必要です。

于 2011-07-14T06:52:38.253 に答える
-2

Mongoの日付について考慮すべきいくつかのポイント:

  • すべての日付はUTCでMongoDBに保存されます
  • MongoDBは、日付を1970-01-01T00:00:00Z以降のミリ秒を表す64ビット整数として内部的に格納します。
  • 指定した日付値がまだUTCになっていない場合は、ドライバーによってMongoDBに保存される前にUTCに変換されます

DateTime.Parseを使用しないことをお勧めします。DateTimesのフォーマット方法に関するあらゆる種類のタイムゾーンの問題が発生します。

代わりに、UTCフレーバーのDateTimeコンストラクターの1つを使用してください。

例:

var dateTime = new DateTime(2011, 5, 5, 0, 0, 0, DateTimeKind.Utc);

お役に立てば幸いです。

于 2011-07-14T06:20:51.957 に答える