次のコードを使用しようとしていますが、間違った日を返しています。
Calendar cal = Calendar.getInstance();
cal.setTime(sampleDay.getTime());
cal.set(Calendar.MONTH, sampleDay.get(Calendar.MONTH)+1);
cal.set(Calendar.DAY_OF_MONTH, 0);
return cal.getTime();
今月の日数を取得します。
Calendar cal = Calendar.getInstance();
cal.setTime(sampleDay.getTime());
int noOfLastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
カレンダーを今月の最終日に設定します。
Calendar cal = Calendar.getInstance();
cal.setTime(sampleDay.getTime());
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
翌月の初日の日付オブジェクトを作成し、日付オブジェクトから1日を減算します。
YearMonth.from(
LocalDate.now( ZoneId.of( "America/Montreal" ) )
).atEndOfMonth()
質問とその他の回答では、古い時代遅れのクラスを使用しています。これらは、Java 8 以降に組み込まれたjava.timeクラスに取って代わられました。Oracle チュートリアルを参照してください。機能の多くは、 ThreeTen-Backportで Java 6 および 7 にバックポートされ、さらにThreeTenABPで Android に適合されています。
LocalDate
このLocalDate
クラスは、時刻とタイム ゾーンのない日付のみの値を表します。これらのオブジェクトはタイム ゾーンを保存しませんが、タイム ゾーンは現在の日付を決定する上で重要であることに注意してください。任意の時点で、日付はタイム ゾーンによって世界中で異なります。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zoneId ); // 2016-06-25
YearMonth
クラスと組み合わせて、YearMonth
任意の月の最終日を決定します。
YearMonth currentYearMonth = YearMonth.from( today ); // 2016-06
LocalDate lastDayOfCurrentYearMonth = currentYearMonth.atEndOfMonth(); // 2016-06-30
ところで、 と は両方とも、古い日時クラスで見られるスクリューボールの 0 から 11 ではなく、予想どおり (1 から 12) の月番号を使用しますLocalDate
。YearMonth
これらの古い日時クラスを非常に面倒で混乱させる多くの不適切な設計上の決定の 1 つです。
TemporalAdjuster
別の有効なアプローチは、TemporalAdjuster
. Pierre Henry による正解を参照してください。
カレンダーを翌月の初日に設定したようです。したがって、sampleDayが含まれる月の最終日を取得するには、1日を引くためにもう1行必要です。
Calendar cal = Calendar.getInstance();
cal.setTime(sampleDay.getTime());
cal.roll(Calendar.MONTH, true);
cal.set(Calendar.DAY_OF_MONTH, 0);
cal.add(Calendar.DAY_OF_MONTH, -1);
一般に、 Joda Timeを使用してこの種のことを行う方がはるかに簡単です。例:
DateTime date = new DateTime(sampleDay.getTime());
return date.plusMonths(1).withDayOfMonth(0).minusDays(1).getMillis();
calObject.getActualMaximum(calobject.DAY_OF_MONTH) を使用します
詳細については、 Real の Java How-toを参照してください。
date4jライブラリを使用する場合:
DateTime monthEnd = dt.getEndOfMonth();
これはうまくいくはずだと思います:
Dim MyDate As Date = #11/14/2012# 'This is just an example date
MyDate = MyDate.AddDays(DateTime.DaysInMonth(MyDate.Year, MyDate.Month) - MyDate.Day)