sql >> データベース >  >> NoSQL >> MongoDB

MongoDBクエリから取得した年と週をJoda日時に変換するにはどうすればよいですか?

    ISO 8601

    Joda-Timeは、 ISO8601 に従います。 週の定義 の標準 。

    • 月曜日は週の最初の日です。
    • 週には1〜52または53の番号が付けられます。
    • 週番号は大文字のWで記述されます 、W23など 。
      年が追加される場合があります、2015-W23
    • 第1週、W01 、その年の最初の木曜日が含まれています。

    私の知る限り、この標準の定義は、さまざまな国や業界での使用においてより一般的になっています。

    日曜日の週

    MongoDBドキュメント 週を次のように定義します:

    私の知る限り、これは主にアメリカの定義であり、アメリカ以外ではあまり使用されていません。

    なぜその定義は0から53と言うのですか?それは「最大54週間」を意味します。この定義で1年に54週間になるとは思いませんが、考えていません。

    なぜミックスするのですか?

    2つの定義を実際に混在させることはできません。なぜわざわざ?目標がMongoDBの週の定義を使用し、それらを日時で表すことである場合は、独自のコンバーターを作成してください。

    私自身のアドバイスは、MongoDBの定義と機能を捨てて、標準の定義に固執することです。

    日曜日を探す

    MongoDBの世界で週から始まる日曜日を見つけたい場合は、独自の小さな関数を作成してください。年番号と週番号を入力して、DateTimeを取得します。このシナリオでは、Joda-Timeの年の週の機能は必要ありません。

    このようなもの。

    int yearNumber = 2015;
    int weekNumber = 0;
    
    LocalDate firstWeekSunday = null;
    LocalDate firstOfYear = new LocalDate ( yearNumber, 1, 1 );
    if ( firstOfYear.getDayOfWeek ( ) == DateTimeConstants.SUNDAY ) {
        firstWeekSunday = firstOfYear;
    } else { // ELSE not Sunday.
        firstWeekSunday = firstOfYear.minusDays ( firstOfYear.getDayOfWeek ( ) );  // Joda-Time uses standard ISO 8601 weeks, where Monday = 1, Sunday = 7.
    }
    LocalDate sunday = firstWeekSunday.plusWeeks ( weekNumber );
    
    DateTimeZone zone = DateTimeZone.forID ( "America/Montreal" );
    DateTime dateTime = sunday.toDateTimeAtStartOfDay ( zone );
    

    コンソールにダンプします。

    System.out.println ( "Sunday-based week of year:" + yearNumber + " week: " + weekNumber + " starts: " + sunday + "." );
    System.out.println ( "Adjusted to time zone: " + zone + " is: " + dateTime + "." );
    

    実行時。

    Sunday-based week of year:2015 week: 0 starts: 2014-12-28.
    Adjusted to time zone: America/Montreal is: 2014-12-28T00:00:00.000-05:00.
    



    1. rmongodb:クエリで$またはを使用

    2. マングース:データフィールドがないと、.chunkコレクションからファイルドキュメントをフェッチできません

    3. StackExchange.Redisを使用してキースペース通知をRedisします

    4. パラメータの値をfindOneBySymfonyリポジトリに渡すことができません