Javaで、現在の日付に1か月を追加するにはどうすればよいですか?
回答:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 1);
ApacheのcommonslangDateUtilsヘルパーユーティリティクラスを利用できます。
Date newDate = DateUtils.addMonths(new Date(), 1);
commons langjarはhttp://commons.apache.org/proper/commons-lang/からダウンロードできます。
LocalDate::plusMonths
例:
LocalDate.now( )
.plusMonths( 1 );
タイムゾーンを指定することをお勧めします。
LocalDate.now( ZoneId.of( "America/Montreal" )
.plusMonths( 1 );
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
おそらく、日付と一緒に時刻が必要です。
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フレームワークは、Java8以降に組み込まれています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスjava.util.Date
、Calendar
&を、SimpleDateFormat
。
ジョダタイムプロジェクトは、今でメンテナンスモードへの移行をアドバイスjava.timeのクラス。
詳細については、Oracleチュートリアルを参照してください。そして、StackOverflowで多くの例と説明を検索してください。仕様はJSR310です。
java.timeクラスはどこで入手できますか?
ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性のある試験場です。あなたはここにいくつかの有用なクラスのような見つけることがInterval
、YearWeek
、YearQuarter
、および多くを。
更新: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();
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();
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 ;
}`
org.apache.commons.lang3.timeパッケージのDateUtilsクラスを使用できます
DateUtils.addMonths(new Date(),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);
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);
}
java.util.Date
、java.util.Calendar
とjava.text.SimpleDateFormat
今のレガシーに取って代わられ、java.timeのJavaの8に、後に内蔵されたクラス。Oracleによるチュートリアルを参照してください。
このメソッドは、現在の日付に1か月を加えたものを返します。
public Date addOneMonth() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 1);
return cal.getTime();
}`
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