java.time を使って、第何週の何曜日は何日か?という実装をしたい。

投稿者: Anonymous

タイムゾーンや年、月は任意であるとします。

週番号と曜日をセットして日付を取得したいのです。
できる限りjava.timeのAPIを利用したいと考えております。

どなたかご存知の方がおられましたらご教授いただけると幸いです。

解決

Javaで週番号を扱われるのなら、国や州(と分野)によって、週番号のルールが異なるあたりのことはご存知かと思いますので、とりあえずISO-8601の週番号として、java.time.LocalDateを使った場合、こんな感じになるようです。

    WeekFields wf = WeekFields.ISO;
    LocalDate ld = LocalDate.now()
            .with(wf.weekBasedYear(), 2016) //2016週年次の
            .with(wf.weekOfWeekBasedYear(), 10) //第10週の
            .with(wf.dayOfWeek(), DayOfWeek.WEDNESDAY.getValue()); //水曜日
    System.out.println(ld); //->2016-03-09

WeekFieldsインスタンスをどう構成するかで、ある程度いろいろな週番号ルールに対応できるようですが、どの程度まで適用可能かは調べていません。GregorianCalendarクラスを使う場合に比べて情報が少ないですね。上のコードもクラスリファレンスだけを頼りに書いて、「一応動いた」ことだけ確認したものです。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *