回答:
このようなことがうまくいくはずです:
String dt = "2008-01-01"; // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dt));
c.add(Calendar.DATE, 1); // number of days to add
dt = sdf.format(c.getTime()); // dt is now the new date
Javaは、C#と比較して、8ボールよりもかなり遅れているように見えます。このユーティリティメソッドは、Java SE 6でCalendar.addメソッドを使用する方法を示しています(おそらく唯一の簡単な方法です)。
public class DateUtil
{
public static Date addDays(Date date, int days)
{
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, days); //minus number would decrement the days
return cal.getTime();
}
}
1日を追加するには、質問ごとに次のように呼び出します。
String sourceDate = "2012-02-29";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = format.parse(sourceDate);
myDate = DateUtil.addDays(myDate, 1);
java.util.Date
、java.util.Calendar
とjava.text.SimpleDateFormat
今のレガシーに取って代わられ、java.timeの Javaの8に、後に内蔵されたクラス。Oracleによるチュートリアルを参照してください。
Java 8以降では、java.timeパッケージによってこれがほぼ自動的に行われます。(チュートリアル)
String
入力と出力を想定:
import java.time.LocalDate;
public class DateIncrementer {
static public String addOneDay(String date) {
return LocalDate.parse(date).plusDays(1).toString();
}
}
LocalDate
。
ApacheのDateUtilsを使用することを好みます。これを確認してくださいhttp://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html。これは、プロジェクトで複数の場所で使用する必要があり、このために1つのライナーメソッドを記述したくない場合に特に便利です。
APIは言う:
addDays(Date date、int amount):新しいオブジェクトを返す日付に日数を追加します。
新しいDateオブジェクトを返し、前のオブジェクト自体は変更しないことに注意してください。
Calendarオブジェクトを作成し、メソッドadd(Calendar.DATE、1);を使用します。
Joda-Time(https://www.joda.org/joda-time/)をご覧ください。
DateTimeFormatter parser = ISODateTimeFormat.date();
DateTime date = parser.parseDateTime(dateString);
String nextDay = parser.print(date.plusDays(1));
Java 8では、日付と時刻を操作するための新しいAPIが追加されました。
Java 8では、次のコード行を使用できます。
// parse date from yyyy-mm-dd pattern
LocalDate januaryFirst = LocalDate.parse("2014-01-01");
// add one day
LocalDate januarySecond = januaryFirst.plusDays(1);
januaryFirst.plusDays(1)
そうではなかったと思いますdate.plusDays(1)
。
Simple java.util libを使用できます
Calendar cal = Calendar.getInstance();
cal.setTime(yourDate);
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();
java.util.Date
、java.util.Calendar
とjava.text.SimpleDateFormat
今のレガシーに取って代わられ、java.timeの Javaの8に、後に内蔵されたクラス。Oracleによるチュートリアルを参照してください。
Date today = new Date();
SimpleDateFormat formattedDate = new SimpleDateFormat("yyyyMMdd");
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, 1); // number of days to add
String tomorrow = (String)(formattedDate.format(c.getTime()));
System.out.println("Tomorrows date is " + tomorrow);
これで明日の日付がわかります。c.add(...)
パラメータは、適切な増分のために1から別の数値に変更できます。
Date
かCalendar
もう一度。
Java 8を使用している場合は、次のようにします。
LocalDate sourceDate = LocalDate.of(2017, Month.MAY, 27); // Source Date
LocalDate destDate = sourceDate.plusDays(1); // Adding a day to source date.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // Setting date format
String destDate = destDate.format(formatter)); // End date
SimpleDateFormatを使用する場合は、次のようにします。
String sourceDate = "2017-05-27"; // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse(sourceDate)); // parsed date and setting to calendar
calendar.add(Calendar.DATE, 1); // number of days to add
String destDate = sdf.format(calendar.getTime()); // End date
LocalDate
クラスではないを使用しLocalDateTime
ます。
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);
これは、oldDateのエポックからのミリ秒数を取り、1日分のミリ秒を追加してから、Date()パブリックコンストラクターを使用して、新しい値を使用して日付を作成します。この方法では、1日だけでなく、1日または任意の時間/分を追加できます。
Java 1.5 以降、TimeUnit.DAYS.toMillis(1)の方がきれいに見えます。
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Date day = dateFormat.parse(string);
// add the day
Date dayAfter = new Date(day.getTime() + TimeUnit.DAYS.toMillis(1));
LocalDate
Java 8以降のjava.timeクラスのクラスと、ThreeTen-Backportプロジェクトで見つかったJava 6およびJava 7へのバックポートは、より賢明なアプローチになると思います。
Java 8では、簡単な方法は次のとおりです。
Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
Instant.now().plus( 1 , ChronoUnit.DAYS )
か?
Java 8では、使用できます java.time.LocalDate
LocalDate parsedDate = LocalDate.parse("2015-10-30"); //Parse date from String
LocalDate addedDate = parsedDate.plusDays(1); //Add one to the day field
java.util.Date
次のようにしてオブジェクトに変換できます。
Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
LocalDate
次のようにして、文字列に形成できます。
String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
それは非常に単純で、簡単な言葉で説明しようとします。以下のように今日の日付を取得します
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);
(定数、値)をとるcalendar.addメソッドによって、この日付を1日先に設定します。ここで定数は、日付、時間、分、秒などであり、値は定数の値です。1日と同様に、前の定数はCalendar.DATEであり、1日先の値が必要なため、その値は1です。
System.out.println(calendar.getTime());// print modified date which is
明日の日付
ありがとう
Apache CommonsにはすでにこのDateUtils.addDays(Date date、int amount) http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28javaがあります。 .util.Date、%20int%29を使用するか、JodaTimeを使用してよりクリーンにすることができます。
文字列と次の日数で日付を渡すだけです
private String getNextDate(String givenDate,int noOfDays) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
String nextDaysDate = null;
try {
cal.setTime(dateFormat.parse(givenDate));
cal.add(Calendar.DATE, noOfDays);
nextDaysDate = dateFormat.format(cal.getTime());
} catch (ParseException ex) {
Logger.getLogger(GR_TravelRepublic.class.getName()).log(Level.SEVERE, null, ex);
}finally{
dateFormat = null;
cal = null;
}
return nextDaysDate;
}
単一の時間単位を追加する必要があり、他のフィールドも同様に増加することが予想される場合は、addメソッドを安全に使用できます。以下の例をご覧ください。
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.set(1970,Calendar.DECEMBER,31);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, 1);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, -1);
System.out.println(simpleDateFormat1.format(cal.getTime()));
印刷されます:
1970-12-31
1971-01-01
1970-12-31
startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender
Calendar
2019でクラスを
Java SE 8以降を使用している場合は、新しい日付/時刻APIを使用する必要があります
int days = 7;
LocalDate dateRedeemed = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/YYYY");
String newDate = dateRedeemed.plusDays(days).format(formatter);
System.out.println(newDate);
からjava.util.Date
に変換する必要がある場合はjava.time.LocalDate
、このメソッドを使用できます。
public LocalDate asLocalDate(Date date) {
Instant instant = date.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
return zdt.toLocalDate();
}
Java SE 8より前のバージョンを使用している場合は、Joda-Timeを使用することをお勧めします
Joda-Timeは、Javaの日付と時刻のクラスに代わる品質の高いもので、Java SE 8より前のJavaの事実上の標準の日付と時刻のライブラリです。
int days = 7;
DateTime dateRedeemed = DateTime.now();
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/uuuu");
String newDate = dateRedeemed.plusDays(days).toString(formatter);
System.out.println(newDate);
java.time
パーツのパターンが正しくありません。dd/MM/uuuu
JodaTimeと同等である必要があります。
DateFormat
APIを使用して文字列をDateオブジェクトに変換し、APIを使用してCalendar
1日を追加します。特定のコード例が必要な場合はお知らせください。回答を更新できます。
あなたは、Java 8を使用している、場合java.time.LocalDate
及びjava.time.format.DateTimeFormatter
この作品は非常にシンプルにすることができます。
public String nextDate(String date){
LocalDate parsedDate = LocalDate.parse(date);
LocalDate addedDate = parsedDate.plusDays(1);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-mm-dd");
return addedDate.format(formatter);
}
toString()
して、文字列i yyyy-MM-dd形式を生成するために使用します(そして、主張する場合は、月mm
は分であることに注意してくださいMM
)。
「org.apache.commons.lang3.time」からこのパッケージを使用できます。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date myNewDate = DateUtils.addDays(myDate, 4);
Date yesterday = DateUtils.addDays(myDate, -1);
String formatedDate = sdf.format(myNewDate);
Date
2018年にクラスを提案することはあまりお勧めできません。以下のような面倒な古い日付時刻クラスjava.util.Date
、java.util.Calendar
とjava.text.SimpleDateFormat
今のレガシーに取って代わられ、java.timeの Javaの8&9のJavaを参照してくださいに組み込まれたクラスのチュートリアル Oracleで。LocalDate
クラスを使用して他の回答を参照してください。
SimpleDateFormat
残念ながら、このクラスはタイムゾーンを挿入し、JVMの現在のデフォルトゾーンを暗黙的に適用します。したがって、このコードの結果は、現在のデフォルトが何であれ、変化します。そのデフォルトは、実行時のどの時点でも変わる可能性があります。
それは実際には簡単です。1日には86400000ミリ秒が含まれます。したがって、まずシステムから現在の時間をミリ秒で取得し、System.currentTimeMillis()
次に84000000ミリ秒を追加して、Date
ミリ秒単位ミリ秒をクラスをしてミリ秒の日付形式を生成します。
例
String Today = new Date(System.currentTimeMillis()).toString();
String Todayは2019-05-9になります
String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();
String Tommorowは2019-05-10になります
String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();
文字列DayAfterTommorowは2019-05-11になります
Date
数年前に現代のjava.timeクラスに取って代わられた恐ろしいクラスを使用しています。単純に使用する方がはるかに簡単:LocalDate.parse( "2019-01-23" ).plusDays( 1 )
ユースケースを明確にしましょう:カレンダー演算を行い、java.util.Dateで開始/終了したいとします。
いくつかのアプローチ:
java.time.Instantの使用を検討してください:
Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);
Date
の最新のjava.timeクラスと混在させないでくださいInstant
。java.timeのクラスは完全にレガシークラスに取って代わります。具体的にInstant
は、を置き換えjava.util.Date
ます。
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);
Sun Apr 30 16:25:33 CEST 2017
来るよMon May 01 16:25:33 CEST 2017
。しかし、それはまだ落胆した解決策です。このメソッドは、正当な理由で廃止されただけでなく、2017年にはDate
クラスに代わる非常に優れた代替手段があります。