web-dev-qa-db-ja.com

Androidのカレンダー月に月+1を追加するのカレンダー問題

私は次のコードを使用しています

Calendar cal = Calendar.getInstance();
System.out.println("Before "+cal.getTime());
cal.set(Calendar.MONTH, 01);
System.out.println("After "+cal.getTime());

出力は

Before Thu Jan 31 10:07:34 IST 2013
After Sun Mar 03 10:07:34 IST 2013

+1janに追加すると、mar monthになります。現在の日付に30日を追加すると、正しい出力が返される場合があります。しかし、私はfeb monthを表示したいです。どんな体でも私を助けてくれますか.

27
Naveen

[設定する+1]フィールドに、日付とは異なる30日間の日付が追加されていることがわかります(出力から確認できます)。

数か月が必要な場合は、コードを使用します

Calendar cal = Calendar.getInstance();
System.out.println("Before "+cal.getTime());  //Before Thu Jan 31 10:16:23 IST 2013

cal.add(Calendar.MONTH, 1);
System.out.println("After "+cal.getTime()); //After Thu Feb 28 10:16:23 IST 2013
54
Ram kiran

add()などを使用する必要があります。

cal.add(Calendar.MONTH, 1);

出力->

Before Thu Jan 31 10:15:04 IST 2013
After Thu Feb 28 10:15:04 IST 2013
7
Lalit Poptani
cal.set(Calendar.MONTH, cal.get( Calendar.MONTH ) + 1 );

表示される理由Mar 3とにかく、それは明らかに30日を追加するため、つまりFeb 31st存在しないため、Mar 3

代わりに翌月の最終日が必要な場合は、次のようにします。

int month = cal.get( Calendar.MONTH );
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + 1);
if( cal.get( month ) > month + 1 ) {
    cal.set( Calendar.MONTH, month + 1 );
    cal.set( Calendar.DAY, /* here comes your day amount finding algorithm */ );
}
2
Danyel

このような日時の作業は、次のいずれかを使用すると簡単です。

  • Joda-Time 2.3ライブラリ
    • JavaにバンドルされているJava.util.Dateおよび.Calendarクラスの一般的な代替
    • オープンソース
    • 無償で
    • アクティブにメンテナンスされています(2014-02現在)
  • Java.timeパッケージ

サンプルコード

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" ); // Or, DateTimeZone.UTC
DateTime dateTime = new DateTime( timeZone );
DateTime monthAgo = dateTime.plusMonths( -1 ); // Smartly handles various month lengths, leap year, and so on.
DateTime monthLater = dateTime.plusMonths( 1 );

コンソールにダンプ…

System.out.println( "dateTime: " + dateTime );
System.out.println( "monthAgo: " + monthAgo );
System.out.println( "monthAgo start of day: " + monthAgo.withTimeAtStartOfDay() );
System.out.println( "monthLater: " + monthLater );

実行すると…

dateTime: 2014-02-24T01:53:22.386+01:00
monthAgo: 2014-01-24T01:53:22.386+01:00
monthAgo start of day: 2014-01-24T00:00:00.000+01:00
monthLater: 2014-03-24T01:53:22.386+01:00
2
Basil Bourque