Я працюю з датою в такому форматі: 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()
передасть дату. Дивіться на ideone .
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();
}
}
LocalDate
.
Я вважаю за краще використовувати DateUtils від Apache. Перевірте це http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html . Це зручно, особливо коли вам доведеться використовувати його у кількох місцях у своєму проекті, і ви не хочете писати для цього свій метод одного вкладиша.
API говорить:
addDays (дата, дата): додає кількість днів до дати повернення нового об'єкта.
Зауважте, що він повертає новий об'єкт 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 )
?
У 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 наступним чином.
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, який приймає (константа, значення). Тут константа може бути DATE, годин, хв, сек і т.д., а значення - значення постійної. Як і на один день, постійна константа вперед - Calendar.DATE, і її значення дорівнює 1, тому що ми хочемо значення на один день вперед.
System.out.println(calendar.getTime());// print modified date which is
завтрашня дата
Дякую
Apache Commons вже має цей DateUtils.addDays (дата, сума) 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;
}
Якщо ви хочете додати одну одиницю часу, і очікуєте, що також будуть збільшені й інші поля, можете сміливо використовувати метод додавання. Дивіться приклад нижче:
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 до 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 для перетворення рядка в об’єкт дати, а потім використовуйте 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()
для створення рядка і 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();
String Tommorow буде 2019-05-10
String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();
String 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
класу.