Я хочу добавить еще один день в определённую дату. Как я могу это сделать?Как добавить один день к дате?
Date dt = new Date();
Теперь я хочу добавить один день к этой дате.
Я хочу добавить еще один день в определённую дату. Как я могу это сделать?Как добавить один день к дате?
Date dt = new Date();
Теперь я хочу добавить один день к этой дате.
дано Date dt
у вас есть несколько возможностей:
Solution 1: Вы можете использовать Calendar
класс для этого:
Date dt = new Date();
Calendar c = Calendar.getInstance();
c.setTime(dt);
c.add(Calendar.DATE, 1);
dt = c.getTime();
Решение 2: Вы должны серьезно рассмотреть вопрос об использовании Joda-Time library, из-за различных недостатков класса Date
. С Joda-Time вы можете сделать следующее:
Date dt = new Date();
DateTime dtOrg = new DateTime(dt);
DateTime dtPlusOne = dtOrg.plusDays(1);
Решение 3: С Java 8 вы также можете использовать новый JSR 310 API (который вдохновлен Joda-Time):
LocalDateTime.from(dt.toInstant()).plusDays(1);
Для решения 1 (по крайней мере) вы также можете передать ему отрицательное значение (например, -1 для получения предыдущего дня). – welshk91
Все решения поддерживают отрицательные смещения, даже с их отрицательными аналогами, поэтому вместо 'plusDays (1)' можно также использовать 'minusDays (-1)'. –
Решение 3 не заканчивается датой .. он заканчивается с LocalDateTime – Charbel
Чтобы сделать его более тонким, чем java, основным принципом было бы преобразовать в какой-то линейный формат даты, юлианские дни, измененные юлианские дни, секунды с какой-то эпохи и т. Д., Добавить свой день и преобразовать обратно.
Причиной для этого является то, что вы откуп «Получить високосный день, второй прыжок, и т.д. правильный» проблемы с кем-то, кто имеет, с некоторым везением, а не сброшенные эту проблему до.
Я предостерегаю вы, что правильное выполнение этих процедур конверсии может быть затруднено. Существует огромное количество разных способов, с помощью которых люди теряют время, самым последним примером высокого профиля является MS Zune. Не делайте слишком много удовольствия в MS, хотя, Это не помогает в том, что существует несколько разных временных форматов, скажем, TAI vs TT.
Date today = new Date();
Date tomorrow = new Date(today.getTime() + (1000 * 60 * 60 * 24));
Дата имеет конструктор с использованием mi lliseconds с UNIX-эпохи. метод getTime() дает вам это значение. Таким образом, добавление миллисекунд в течение дня, делает трюк. Если вы хотите регулярно делать такие манипуляции, я рекомендую определить константы для значений.
Важный намек: это неверно во всех случаях. Прочтите комментарий WARNING ниже.
ВНИМАНИЕ! Добавление 1000 * 60 * 60 * 24 миллисекунды к дате java в один прекрасный день добавит нулевые дни или два дня к исходной дате в условиях прыжковых секунд, летнего времени и т.п. Если вам нужно быть на 100% уверенным, добавляется только один день, это решение не тот, который нужно использовать. –
Вы правы. Я добавляю подсказку к этому комментарию к моему ответу. – Mnementh
Downvoting, поскольку это очень неправильный ответ из-за как летнего времени, так и секунд прыжка. Используйте Календарь или время Джоды. – stolsvik
Использование объекта DateTime obj.Add, чтобы добавить, что вы хотите, чтобы день и т. Д. Надеюсь, что это работает :)
Это увеличит любую дату ровно один
String untildate="2011-10-08";//can take any date in current format
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(dateFormat.parse(untildate));
cal.add(Calendar.DATE, 1);
String convertedDate=dateFormat.format(cal.getTime());
System.out.println("Date increase by one.."+convertedDate);
Я предпочитаю joda для даты и времени арифметике, потому что это гораздо лучше читаемым:
Date tomorrow = now().plusDays(1).toDate();
Или
endOfDay(now().plus(days(1))).toDate()
startOfDay(now().plus(days(1))).toDate()
и производительность не важна? Если вы должны делать эти вычисления во многих случаях, это очень дорого. Считываемое - это одно, но нужно думать более широко. – davidxxx
Обновление: Библиотека Joda-Time теперь находится в режиме обслуживания. Команда советует перейти на классы java.time.
LocalDate.of(2017 , Month.JANUARY , 23)
.plusDays(1)
Лучше всего, чтобы избежать java.util.Date
класса в целом. Но если вы это сделаете, вы можете преобразовать между старыми старыми классами времени и современными классами java.time. Посмотрите на новые методы, добавленные в старые классы.
Класс Instant
, близкий к эквиваленту Date
, оба являются моментом на временной шкале. Instant
разрешает наносекунды, а Date
- миллисекунды.
Instant instant = myUtilDate.toInstant() ;
Вы можете добавить этот день к этому, но имейте это в виду в UTC. Поэтому вы не будете настраивать аномалии, такие как переход на летнее время. Укажите единицу времени с помощью класса ChronoUnit
.
Instant nextDay = instant.plus(1 , ChronoUnit.DAYS) ;
Если вы хотите, чтобы быть подкованной с часовыми поясами, указать ZoneId
получить ZonedDateTime
.
ZoneId z = ZoneId.of("America/Montreal") ;
ZonedDateTime zdt = instant.atZone(z) ;
ZonedDateTime zdtNextDay = zdt.plusDays(1) ;
Joda-Time 2,3 библиотека делает этот вид даты и время работы гораздо проще. Класс java.util.Date в комплекте с Java, как известно, хлопотно, и его следует избегать.
Вот пример кода.
Ваш java.util.Date преобразуется в объект Joda-Time DateTime. В отличие от j.u.Date, DateTime действительно знает свой назначенный часовой пояс. Часовой пояс имеет решающее значение, поскольку добавление дня для получения того же wall-clock time завтра может означать внесение корректировок, например, для 23-часового или 25-часового дня в случае Daylight Saving Time (DST) здесь, в Соединенных Штатах. Если вы укажете time zone, Joda-Time может выполнить такую настройку. После добавления дня мы преобразуем объект DateTime обратно в объект java.util.Date.
java.util.Date yourDate = new java.util.Date();
// Generally better to specify your time zone rather than rely on default.
org.joda.time.DateTimeZone timeZone = org.joda.time.DateTimeZone.forID("America/Los_Angeles");
DateTime now = new DateTime(yourDate, timeZone);
DateTime tomorrow = now.plusDays(1);
java.util.Date tomorrowAsJUDate = tomorrow.toDate();
самосвала утешать ...
System.out.println("yourDate: " + yourDate);
System.out.println("now: " + now);
System.out.println("tomorrow: " + tomorrow);
System.out.println("tomorrowAsJUDate: " + tomorrowAsJUDate);
При запуске ...
yourDate: Thu Apr 10 22:57:21 PDT 2014
now: 2014-04-10T22:57:21.535-07:00
tomorrow: 2014-04-11T22:57:21.535-07:00
tomorrowAsJUDate: Fri Apr 11 22:57:21 PDT 2014
Как уже упоминалось в топ ответ, так как Java 8 можно сделать:
Date dt = new Date();
LocalDateTime.from(dt.toInstant()).plusDays(1);
, но иногда это может привести к DateTimeException
, как это:
java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: 2014-11-29T03:20:10.800Z of type java.time.Instant
можно избежать этого исключения, просто проходя часовой пояс:
LocalDateTime.from(dt.toInstant().atZone(ZoneId.of("UTC"))).plusDays(1);
В особом случае, если вы попросили сделать свой собственный класс даты, возможно, с вашего компьютера Программирование Профессор; Этот метод будет очень удачным.
public void addOneDay(){
int [] months = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
day++;
if (day> months[month-1]){
month++;
day = 1;
if (month > 12){
year++;
month = 1;
}
}
}
Для точки зрения производительности решение очень интересно. +1 – davidxxx
Это не работает с високосными годами. –
Java 1.8 версия имеет приятное обновление для времени данных API.
Вот фрагмент кода:
LocalDate lastAprilDay = LocalDate.of(2014, Month.APRIL, 30);
System.out.println("last april day: " + lastAprilDay);
LocalDate firstMay = lastAprilDay.plusDays(1);
System.out.println("should be first may day: " + firstMay);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd");
String formatDate = formatter.format(firstMay);
System.out.println("formatted date: " + formatDate);
Выход:
last april day: 2014-04-30
should be first may day: 2014-05-01
formatted date: 01
Для получения дополнительной информации см Java документацию к этим классам:
лучше всего использовать:
long currenTime = System.currentTimeMillis();
long oneHourLater = currentTime + TimeUnit.HOURS.toMillis(1l);
Кроме того, вы можете добавить месяцы, дни, минуты и т.д.
вы можете использовать этот метод после импорта org.apache.commons .lang.time.DateUtils:
DateUtils.addDays(new Date(), 1));
U можно попробовать java.util.Date
библиотеку, как это
int no_of_day_to_add = 1;
Date today = new Date();
Date tomorrow = new Date(today.getYear(), today.getMonth(), today.getDate() + no_of_day_to_add);
Изменить значение no_of_day_to_add
, как вы хотите.
Я установил значение no_of_day_to_add
в 1
, потому что u хотел только один день, чтобы добавить.
Подробнее см. В this documentation.
Вы хотите, чтобы после дня находят этот код, попробуйте ..
public Date getToDateAfterDays(Integer day) {
Date nowdate = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(nowdate);
cal.add(Calendar.DATE, day);
return cal.getTime();
}
Я покажу вам, как мы можем сделать это в Java 8. Здесь вы идете:
public class DemoDate {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
System.out.println("Current date: " + today);
//add 1 day to the current date
LocalDate date1Day = today.plus(1, ChronoUnit.DAYS);
System.out.println("Date After 1 day : " + date1Day);
}
}
Выход:
Current date: 2016-08-15
Date After 1 day : 2016-08-16
Java 8 LocalDate API
LocalDate.now().plusDays(1L);
Я нашел простой метод, чтобы добавить произвольное время к объекту Date
Date d = new Date(new Date().getTime() + 86400000)
Где:
86400000 составляет 1 день в миллисекундах
3600000 составляет 1 час в миллисекундах
возможно дубликат [Как я могу увеличивать дата на один день в Java?] (http://stackoverflow.com/questions/428918/how-can-i-increment-a-date-by-one-day-in-java) –
Возможный дубликат [How могу ли я увеличить дату на один день в Java?] (http://stackoverflow.com/questions/428918/how-can-i-increment- a-date-by-one-day-in-java) – GSerg