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

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

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

Ответы [ 27 ]

23 голосов
/ 10 декабря 2013
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 на другое число для соответствующего приращения.

17 голосов
/ 27 мая 2017

Если вы используете 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
15 голосов
/ 15 сентября 2014
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);

Это берет количество миллисекунд с начала эпохи из oldDate и добавляет миллисекунды за 1 день, а затем использует открытый конструктор Date () для создания даты с использованием нового значения. Этот метод позволяет добавлять 1 день или любое количество часов / минут, а не только целые дни.

14 голосов
/ 24 февраля 2017

С 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));
9 голосов
/ 01 декабря 2015

В 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 голосов
/ 31 июля 2018

В Java 8 простой способ сделать это:

Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
9 голосов
/ 26 декабря 2017

Это очень просто, пытаясь объяснить простым словом. получить сегодняшнюю дату, как показано ниже

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

Теперь установите эту дату на один день вперед с помощью метода calendar.add, который принимает (константа, значение). Здесь константа может быть ДАТА, часы, минуты, секунды и т. Д., А значение - это значение константы. Как и на один день, константа впереди - Calendar.DATE, а ее значение равно 1, потому что нам нужно значение на один день вперед.

System.out.println(calendar.getTime());// print modified date which is завтрашняя дата

Спасибо

7 голосов
/ 28 марта 2013

Apache Commons уже имеет этот DateUtils.addDays (Дата, число, int) http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28java.util.Date,%20int%29, который вы используете, или вы можете использовать JodaTime, чтобы сделать его более чистым.

7 голосов
/ 09 февраля 2015

Если вы хотите добавить одну единицу времени и ожидаете увеличения других полей, вы можете безопасно использовать метод 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 голосов
/ 16 июня 2014

Просто укажите дату в строке и число следующих дней

 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;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...