Как я могу увеличить дату на один день в Java? - PullRequest
514 голосов
/ 09 января 2009

Я работаю с датой в этом формате: yyyy-mm-dd.

Как я могу увеличить эту дату на один день?

Ответы [ 27 ]

645 голосов
/ 09 января 2009

Примерно так должно получиться:

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
192 голосов
/ 08 марта 2012

Java, похоже, намного отстает от восьми шаров по сравнению с C #. Этот служебный метод показывает способ выполнения в 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();
    }
}

Чтобы добавить один день, на вопрос задайте его следующим образом:

String sourceDate = "2012-02-29";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = format.parse(sourceDate);
myDate = DateUtil.addDays(myDate, 1);
66 голосов
/ 03 января 2014

java.time

В Java 8 и более поздних версиях пакет java.time *1003* делает это в значительной степени автоматически. ( Учебник )

Предполагая String вход и выход:

import java.time.LocalDate;

public class DateIncrementer {
  static public String addOneDay(String date) {
    return LocalDate.parse(date).plusDays(1).toString();
  }
}
61 голосов
/ 13 августа 2012

Я предпочитаю использовать DateUtils от Apache. Отметьте это http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html. Это удобно, особенно когда вам нужно использовать его в нескольких местах в вашем проекте, и вы не захотите писать для этого метод с одним вкладышем.

API говорит:

addDays (Date date, int amount): Добавляет количество дней к дате, возвращающей новый объект.

Обратите внимание, что он возвращает новый объект Date и не вносит изменений в сам предыдущий.

57 голосов
/ 09 января 2009
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Calendar cal = Calendar.getInstance();
cal.setTime( dateFormat.parse( inputString ) );
cal.add( Calendar.DATE, 1 );
46 голосов
/ 09 января 2009

Создайте объект Calendar и используйте метод add (Calendar.DATE, 1);

41 голосов
/ 09 января 2009

Посмотрите на Joda-Time (https://www.joda.org/joda-time/).

DateTimeFormatter parser = ISODateTimeFormat.date();

DateTime date = parser.parseDateTime(dateString);

String nextDay = parser.print(date.plusDays(1));
39 голосов
/ 28 мая 2014

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 голосов
/ 02 декабря 2010

Обратите внимание, что эта строка добавляет 24 часа:

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

но эта строка добавляет один день

cal.add( Calendar.DATE, 1 );

В дни с переходом на летнее время (25 или 23 часа) вы получите разные результаты!

27 голосов
/ 29 июня 2015

вы можете использовать Simple java.util lib

Calendar cal = Calendar.getInstance(); 
cal.setTime(yourDate); 
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...