6

次のコードを使用しようとしていますが、間違った日を返しています。

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();
4

8 に答える 8

19

今月の日数を取得します。


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));

于 2008-09-16T13:51:21.317 に答える
3

翌月の初日の日付オブジェクトを作成し、日付オブジェクトから1日を減算します。

于 2008-09-16T13:49:48.730 に答える
3

tl;dr

YearMonth.from(
    LocalDate.now( ZoneId.of( "America/Montreal" ) )
).atEndOfMonth()

java.time

質問とその他の回答では、古い時代遅れのクラスを使用しています。これらは、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) の月番号を使用しますLocalDateYearMonthこれらの古い日時クラスを非常に面倒で混乱させる多くの不適切な設計上の決定の 1 つです。

TemporalAdjuster

別の有効なアプローチは、TemporalAdjuster. Pierre Henry による正解を参照してください。

于 2016-06-25T20:56:54.587 に答える
2

カレンダーを翌月の初日に設定したようです。したがって、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();
于 2008-09-16T13:52:34.403 に答える
2

calObject.getActualMaximum(calobject.DAY_OF_MONTH) を使用します

詳細については、 Real の Java How-toを参照してください。

于 2008-09-16T13:56:27.390 に答える
1

date4jライブラリを使用する場合:

DateTime monthEnd = dt.getEndOfMonth();
于 2011-02-13T02:08:18.153 に答える
-1

これはうまくいくはずだと思います:

Dim MyDate As Date = #11/14/2012#  'This is just an example date

MyDate = MyDate.AddDays(DateTime.DaysInMonth(MyDate.Year, MyDate.Month) - MyDate.Day)
于 2012-11-16T01:35:10.477 に答える