その日の最初の瞬間
ngeekによる答えは正しいですが、その日の最初の瞬間に時間を置くことができません。時間を調整するには、への呼び出しを追加しますwithTimeAtStartOfDay
。
// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
org.joda.time.DateTime startOfThisMonth = new org.joda.time.DateTime().dayOfMonth().withMinimumValue().withTimeAtStartOfDay();
org.joda.time.DateTime startofNextMonth = startOfThisMonth.plusMonths( 1 ).dayOfMonth().withMinimumValue().withTimeAtStartOfDay();
System.out.println( "startOfThisMonth: " + startOfThisMonth );
System.out.println( "startofNextMonth: " + startofNextMonth );
米国シアトルで実行する場合…</p>
startOfThisMonth: 2013-11-01T00:00:00.000-07:00
startofNextMonth: 2013-12-01T00:00:00.000-08:00
これらの2行のコンソール出力の違いに注意してください。夏時間のために-7と-8です。
通常、デフォルトに依存するのではなく、常にタイムゾーンを指定する必要があります。簡単にするために、ここでは省略しています。このような行を追加し、上記の例で使用されているコンストラクターにタイムゾーンオブジェクトを渡す必要があります。
// Time Zone list: http://joda-time.sourceforge.net/timezones.html (Possibly out-dated, read note on that page)
// UTC time zone (no offset) has a constant, so no need to construct: org.joda.time.DateTimeZone.UTC
org.joda.time.DateTimeZone kolkataTimeZone = org.joda.time.DateTimeZone.forID( "Asia/Kolkata" );
java.time
上記は正しいですが、時代遅れです。Joda-Timeライブラリは、Java8以降に組み込まれたjava.timeフレームワークに取って代わられました。
はLocalDate
、時刻やタイムゾーンのない日付のみの値を表します。日付を決定するには、タイムゾーンが重要です。いつでも、日付は世界中のゾーンによって異なります。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zoneId );
のいずれかを使用しTemporalAdjusters
て、月の最初を取得します。
LocalDate firstOfMonth = today.with( TemporalAdjusters.firstDayOfMonth() );
は、その日の最初の瞬間を表すLocalDate
を生成できます。ZonedDateTime
ZonedDateTime firstMomentOfCurrentMonth = firstOfMonth.atStartOfDay( zoneId );