Я работаю с датой в таком формате: yyyy-mm-dd
.
Как я могу увеличить эту дату на один день?
Я работаю с датой в таком формате: yyyy-mm-dd
.
Как я могу увеличить эту дату на один день?
Ответы:
Нечто подобное должно сработать:
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
add()
накатит дату. Смотри на идеоне .
Похоже, что 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);
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();
}
}
ZonedDateDateTime
и так и OffsetDateTime
есть plusDays
и minusDays
методы, а такжеLocalDate
LocalDate
.
Я предпочитаю использовать 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 и не вносит изменений в сам предыдущий.
Создайте объект 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));
Обратите внимание, что эта строка добавляет 24 часа:
d1.getTime() + 1 * 24 * 60 * 60 * 1000
но эта строка добавляет один день
cal.add( Calendar.DATE, 1 );
В дни с переходом на летнее время (25 или 23 часа) вы получите разные результаты!
В 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 день или любое количество часов / минут, а не только целые дни.
Начиная с 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.time для Java 8 и более поздних версий, а также обратный порт для Java 6 и Java 7, обнаруженный в проекте ThreeTen-Backport .
В Java 8 простой способ сделать это:
Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
Instant.now().plus( 1 , ChronoUnit.DAYS )
?
Это очень просто, пытаясь объяснить простым словом. получить сегодняшнюю дату, как показано ниже
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
завтрашнее свидание
Спасибо
В 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"));
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, чтобы сделать его более чистым.
Просто укажите дату в строке и количество следующих дней
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 Date / Time
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 до Java SE 8
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 для преобразования String в объект Date, затем используйте Calendar
API для добавления одного дня. Дайте мне знать, если вы хотите конкретные примеры кода, и я могу обновить свой ответ.
Если вы используете 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()
для создания формата string 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 и Java 9. См. Учебное пособие Oracle . Смотрите другие ответы, используя LocalDate
класс.
SimpleDateFormat
сожалению, класс вводит часовой пояс, неявно применяя текущую зону по умолчанию JVM. Таким образом, результаты этого кода будут отличаться в зависимости от текущего значения по умолчанию - и это значение по умолчанию может измениться в любой момент во время выполнения.
Это на самом деле просто. Один день содержит 86400000 миллисекунд. Итак, сначала вы получите текущее время в миллисекундах из системы, используя System.currentTimeMillis()
затем добавьте 84000000 миллисекунд и используйтеDate
класс для генерации формата даты в миллисекундах.
пример
String Today = new Date(System.currentTimeMillis()).toString();
Строка Сегодня будет 2019-05-9
String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();
Струна завтра будет 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
классу.