Javaで現在の日付に1か月を追加するにはどうすればよいですか?


回答:


115
Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1);

ありがとうpiyush、そしてどのようなこの校正日付フォーマット、私は、MySQLでこれを格納する必要がある
キラン

日付のmysqlデータ型はDATETIMEです。
kiran 2011

この正しい日付形式は
calreturn

1
現在の日付に希望の形式で月を追加するJavaコードは次のようになります。さて、この文字列を日付に変換してMYSqlデータベースに挿入するのはあなた次第です。STR_TO_DATE(str、format)関数を使用して、DateFormatコンストラクターまたはMYSQLクエリの後で日付形式を変更できることに注意してください。DateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss"); 今すぐカレンダー= Calendar.getInstance(); now.add(Calendar.MONTH、1); 文字列dateString = formatter.format(now.getTime());
Piyush Mattoo 2011

3
これは今時代遅れさ:stackoverflow.com/questions/4905416/...
softarn

49

Java 8

LocalDate futureDate = LocalDate.now().plusMonths(1);

1
java.util.Dateました:Date.from((LocalDate.nowを()plusMonths(1))atStartOfDay()atZone(ZoneId.systemDefault())toInstant()。。。。)
イスマイルヤウス


29

tl; dr

LocalDate::plusMonths

例:

LocalDate.now( )
         .plusMonths( 1 );

タイムゾーンを指定することをお勧めします。

LocalDate.now( ZoneId.of( "America/Montreal" )
         .plusMonths( 1 );

java.time

java.timeフレームワークは、Java8以降に組み込まれています。これらのクラスは、次のような古い面倒日時クラスを取って代わりますjava.util.Date.Calendar、& java.text.SimpleDateFormatジョダタイムチームもjava.timeへの移行をアドバイスします。

詳細については、Oracleチュートリアルを参照してください。。そして、StackOverflowで多くの例と説明を検索してください。

java.timeの機能の多くは、中のJava 6&7にバックポートされThreeTen-バックポートし、さらに中のAndroidに適応ThreeTenABP

日付のみ

日付のみが必要な場合は、LocalDateクラスを使用してください。

ZoneId z = ZoneId.of( "America/Montreal" );
 LocalDate today = LocalDate.now( z );

today.toString():2017-01-23

月を追加します。

LocalDate oneMonthLater = today.plusMonths( 1 );

oneMonthLater.toString():2017-02-23

日付時刻

おそらく、日付と一緒に時刻が必要です。

まず、ナノ秒の解像度でUTCの現在の瞬間を取得します。

Instant instant = Instant.now();

月を追加することは、日付を決定することを意味します。また、日付を決定することは、タイムゾーンを適用することを意味します。いつでも、日付は世界中で異なり、新しい日が東に早く夜明けします。したがって、それInstantをタイムゾーンに調整します。

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

今月を追加します。java.timeにLeap月と、月の長さが異なるという事実を処理させます。

ZonedDateTime zdtMonthLater = zdt.plusMonths( 1 );

この種の計算を行うときは、時刻を1日の最初の瞬間に調整することをお勧めします。その最初の瞬間が常に00:00:00.0そうであるとは限らないので、java.timeに時刻を決定させます。

ZonedDateTime zdtMonthLaterStartOfDay = zdtMonthLater.toLocalDate().atStartOfDay( zoneId );

java.timeについて

java.timeフレームワークは、Java8以降に組み込まれています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスjava.util.DateCalendar&を、SimpleDateFormat

ジョダタイムプロジェクトは、今でメンテナンスモードへの移行をアドバイスjava.timeのクラス。

詳細については、Oracleチュートリアルを参照してください。そして、StackOverflowで多くの例と説明を検索してください。仕様はJSR310です。

java.timeクラスはどこで入手できますか?

ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性のある試験場です。あなたはここにいくつかの有用なクラスのような見つけることがIntervalYearWeekYearQuarter、および多くを


ジョーダタイム

更新:Joda-Timeプロジェクトは現在メンテナンスモードになっています。そのチームは、java.timeクラスへの移行をアドバイスしています。後世のために、このセクションはそのままにしておきます。

ジョダタイムライブラリは、スマートな方法で数ヶ月を追加するための方法を提供しています。

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime now = DateTime.now( timeZone );
DateTime nextMonth = now.plusMonths( 1 );

時刻をその日の最初の瞬間に調整して、その日に集中することをお勧めします。

DateTime nextMonth = now.plusMonths( 1 ).withTimeAtStartOfDay();

12
Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1);
java.util.Date dt = cal.getTime();

6

(Dugguから採用)

public static Date addOneMonth(Date date)
{
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.add(Calendar.MONTH, 1);
    return cal.getTime();
}

6

calanderを使用して、このコードを試してください。

Calendar calendar = Calendar.getInstance();         
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
Date nextMonthFirstDay = calendar.getTime();
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
Date nextMonthLastDay = calendar.getTime();

5
public Date  addMonths(String dateAsString, int nbMonths) throws ParseException {
        String format = "MM/dd/yyyy" ;
        SimpleDateFormat sdf = new SimpleDateFormat(format) ;
        Date dateAsObj = sdf.parse(dateAsString) ;
        Calendar cal = Calendar.getInstance();
        cal.setTime(dateAsObj);
        cal.add(Calendar.MONTH, nbMonths);
        Date dateAsObjAfterAMonth = cal.getTime() ;
    System.out.println(sdf.format(dateAsObjAfterAMonth));
    return dateAsObjAfterAMonth ;
}`

大きなコードブロックだけでなく、コードの機能について説明していただけますか?
ネコラス2017

私のコードはより制限的でより一般的です。固定形式「MM / dd / yyyy」の日付(文字列形式)のみを処理するため、より復元力があります。一般的な理由は、指定した日付の正の月のいずれかを追加できるためです。
–DJAMSilvèreGatien 2017

したがって、java.util.Dateを取得し、月を追加した後に別のjava.util.Dateをレンダリングする、より制限の少ないコードが必要な場合は、以下を参照してください。Calendarcal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.MONTH、1); cal.getTime();
–DJAMSilvèreGatien 2017

3

org.apache.commons.lang3.timeパッケージのDateUtilsクラスを使用できます

DateUtils.addMonths(new Date(),1);

シンプルで簡単なソリューション。
Royal.O

2

ワンライナーが必要で(つまり、Jasper Reportsの式の場合)、調整が正確に1か月でなくてもかまいません(つまり、「30日」で十分です)。

new Date($F{invoicedate}.getTime() + 30L * 24L * 60L * 60L * 1000L)


単純なintとして扱われ、負の数にオーバーフローする場合は、数値に「L」接尾辞を追加することを忘れないでください。
ニコラスブケ

1

このように使用できます。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String d = "2000-01-30";
Date date= new Date(sdf.parse(d).getTime());
date.setMonth(date.getMonth() + 1);

* @deprecated JDKバージョン1.1以降、* <code> Calendar.set(Calendar.MONTH、int month)</ code>に置き換えられました。Date.javaが言うように。
Jasper Lankhorst 2018

1

1か月後の日を見つけるには、今日が何曜日であるかを確認する必要があります。

したがって、日が月の最初の日である場合は、次のコードを実行します

Calendar calendar = Calendar.getInstance();

    Calendar calFebruary = Calendar.getInstance();
    calFebruary.set(Calendar.MONTH, Calendar.FEBRUARY);

    if (calendar.get(Calendar.DAY_OF_MONTH) == 1) {// if first day of month
    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
    Date nextMonthFirstDay = calendar.getTime();
    System.out.println(nextMonthFirstDay);

    }

日が月末の場合は、次のコードを実行します。

    else if ((calendar.getActualMaximum(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH))) {// if last day of month
    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
    Date nextMonthLastDay = calendar.getTime();
    System.out.println(nextMonthLastDay);
    }

その日が2月の場合は、次のコードを実行します

    else if (calendar.get(Calendar.MONTH) == Calendar.JANUARY
            && calendar.get(Calendar.DAY_OF_MONTH) > calFebruary.getActualMaximum(Calendar.DAY_OF_MONTH)) {// control of february

    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
    Date nextMonthLastDay = calendar.getTime();
    System.out.println(nextMonthLastDay);

    }

その他の場合は、以下のコードを使用します。

    else { // any day
    calendar.add(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
    Date theNextDate = calendar.getTime();
    System.out.println(theNextDate);
    }

以下のようなFYI、ひどく面倒日時クラスjava.util.Datejava.util.Calendarjava.text.SimpleDateFormat今のレガシーに取って代わられ、java.timeのJavaの8に、後に内蔵されたクラス。Oracleによるチュートリアル参照してください。
バジルバーク

0

このメソッドは、現在の日付に1か月を加えたものを返します。

public Date  addOneMonth()  {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.MONTH, 1);
        return cal.getTime();
}`


-3
public class StringSplit {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        date(5, 3);
        date(5, 4);
    }

    public static String date(int month, int week) {
        LocalDate futureDate = LocalDate.now().plusMonths(month).plusWeeks(week);
        String Fudate = futureDate.toString();
        String[] arr = Fudate.split("-", 3);
        String a1 = arr[0];
        String a2 = arr[1];
        String a3 = arr[2];
        String date = a3 + "/" + a2 + "/" + a1;
        System.out.println(date);
        return date;
    }
}

出力:

10/03/2020
17/03/2020

1
まず第一に、OPに基づいて答えは間違っています。2番目にOPは8(!)年前に回答され、3番目に文字列のロードを使用するよりも日付出力をフォーマットするためのより良い方法があります。
MarkusDeibel19年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.