web-dev-qa-db-ja.com

Javaで日付を1日ずつ増やすにはどうすればいいですか。

私はyyyy-mm-ddという形式の日付で作業しています。

この日付を1日ずつ増やすにはどうすればよいですか。

511
user48094

このような何かがトリックをするべきです:

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
642
Dave

JavaはC#と比較して8ボールよりもかなり遅れているようです。このユーティリティメソッドは、 Calendar.addメソッド を使用してJava SE 6で実行する方法を示しています(おそらく唯一の簡単な方法です)。

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

Java.time

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();
  }
}
65

私は DateUtils をApacheから使うことを好みます。 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オブジェクトが返され、前のオブジェクトには変更が加えられません。

61
Risav Karna
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Calendar cal = Calendar.getInstance();
cal.setTime( dateFormat.parse( inputString ) );
cal.add( Calendar.DATE, 1 );
57
Alex B

Calendarオブジェクトを作成してメソッドadd(Calendar.DATE、1)を使用します。

46
krosenvold

Joda-Time( https://www.joda.org/joda-time/ )を見てください。

DateTimeFormatter parser = ISODateTimeFormat.date();

DateTime date = parser.parseDateTime(dateString);

String nextDay = parser.print(date.plusDays(1));
41
Willi aus Rohr

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

この行は24時間追加されます。

d1.getTime() + 1 * 24 * 60 * 60 * 1000

しかし、この行は一日を追加します

cal.add( Calendar.DATE, 1 );

夏時間が変更された日(25または23時間)には、異なる結果が得られます。

38
Florian R.

あなたはSimple Java.util libを使うことができます

Calendar cal = Calendar.getInstance(); 
cal.setTime(yourDate); 
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();
27
Pawan Pareek
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から別の数値に変更することができます。

23
Akhilesh T.

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
17
Avijit Karmakar
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);

これは、oldDateからのEpochからのミリ秒数を取り、1日分のミリ秒を追加してからDate()パブリックコンストラクターを使用して新しい値を使用して日付を作成します。この方法では、丸一日だけでなく、1日、または任意の数の時間/分を追加できます。

15
dvaey

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

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"));
9
Ramesh-X

Java 8では、簡単な方法は次のとおりです。

Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
9
dpk

簡単な言葉で説明しようと、それは非常に簡単です。以下のように今日の日付を取得します

Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);

(date、date)を取るcalendar.addメソッドを使って、この日付を1日先に設定しましょう。ここで、定数はDATE、hours、min、secなどであり、valueはconstantの値です。一日のように、先の定数はCalendar.DATEで、その値は1です。一日先の値が欲しいからです。

明日のSystem.out.println(calendar.getTime());// print modified date which is

ありがとう

9
Kushwaha

文字列と次の日数で日付を渡すだけです

 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;

}
7
LMK

単一の時間単位を追加したいが、他のフィールドも同様に増分されることが予想される場合は、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
7
terrmith

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を使ってもっときれいにすることができます。

7
ROCKY

DateFormat APIを使用してStringをDateオブジェクトに変換し、次に Calendar APIを使用して1日を追加します。あなたが特定のコード例が欲しいかどうか私に知らせてください、そして私は私の答えを更新することができます。

5
Ross

このパッケージは "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);  
3
Shaheed

Java 8を使用している場合は、Java.time.LocalDateJava.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); 
}
3
realhu
startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender
2
Popal

ユースケースを明確にしましょう。カレンダーの算術演算を開始し、 Java.util.Date で開始/終了します。

いくつかのアプローチ:

  1. 文字列に変換し、 SimpleDateFormat :で戻します。これは非効率的な解決策です。
  2. に変換: - LocalDate :あなたは、時刻情報を失うことになります。
  3. LocalDateTimeに変換 :これにはより多くのステップが含まれているので、タイムゾーンについて心配する必要があります。
  4. Date.getTime() でエポックに変換する:これは効率的ですが、ミリ秒で計算しています。

Java.time.Instant の使用を検討してください。

Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);
2
Chad Juliano

Java SE 8以降を使用する場合は、新しい Date/Time 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/YYYY");

   String newDate = dateRedeemed.plusDays(days).toString(formatter);   
   System.out.println(newDate);
2
Eduardo Eljaiek

実は簡単です。 1日は86400000ミリ秒です。それで最初にThe System.currentTimeMillis()を使ってThe Systemから現在時刻をミリ秒で取得し、次に84000000ミリ秒を追加し、Dateクラスを使用してミリ秒のA日付フォーマットを生成します。

String Today = new Date(System.currentTimeMillis()).toString();

今日の弦は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になります

1
Mike T
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);
0