Я хочу добавить один день к определенной дате. Как я могу это сделать?
Date dt = new Date();
Теперь я хочу добавить один день к этой дате.
Я хочу добавить один день к определенной дате. Как я могу это сделать?
Date dt = new Date();
Теперь я хочу добавить один день к этой дате.
Учитывая Date dt
, у вас есть несколько возможностей:
Решение 1: Для этого можно использовать класс Calendar
:
Date dt = new Date();
Calendar c = Calendar.getInstance();
c.setTime(dt);
c.add(Calendar.DATE, 1);
dt = c.getTime();
Решение 2: Вам следует серьезно подумать об использовании библиотеки Joda-Time, из-за различных недостатков класса Date
. С помощью Joda-Time вы можете сделать следующее:
Date dt = new Date();
DateTime dtOrg = new DateTime(dt);
DateTime dtPlusOne = dtOrg.plusDays(1);
Решение 3: С помощью Java 8 вы также можете использовать новый API JSR 310 (который вдохновлен Joda-Time):
LocalDateTime.from(dt.toInstant()).plusDays(1);
Date today = new Date();
Date tomorrow = new Date(today.getTime() + (1000 * 60 * 60 * 24));
Дата имеет конструктор, использующий миллисекунды с UNIX-эпохи. метод getTime() дает вам это значение. Таким образом, добавление миллисекунд в течение дня, делает трюк. Если вы хотите регулярно выполнять такие манипуляции, я рекомендую определить константы для значений.
Важный намек: во всех случаях это неверно. Прочтите комментарий WARNING ниже.
Я бы осторожно использовал
Date today = new Date();
Date tomorrow = new Date(today.getTime() + (1000 * 60 * 60 * 24));
Если вы используете Calendar Timezone
с дневной экономией, в меняющийся день с лета на зимнее время он не перейдет на следующий день.
Это приведет к увеличению любой даты одним нажатием
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-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 преобразуется в объект DateTime объекта Joda-Time. В отличие от j.u.Date, DateTime действительно знает свой назначенный часовой пояс. Часовой пояс имеет решающее значение, поскольку добавление дня для получения того же настенного времени завтра может означать внесение корректировок, например, для 23-часового или 25 - в течение дня Летнее время (DST) здесь, в Соединенных Штатах. Если вы укажете часовой пояс 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);
используйте объект DateTime obj.Add, чтобы добавить, что вы хотите, чтобы день и т.д. Надеюсь, что это работает:)
Чтобы сделать его более тонким, чем java, основным принципом будет преобразование в некоторый линейный формат даты, юлианские дни, измененные юлианские дни, секунды с какой-то эпохи и т.д., добавление вашего дня и обратный возврат.
Причиной этого является то, что вы производите ферму из "проблемы с прыжком в день, прыгающей секунды и т.д.", чтобы кто-то, кто с некоторой удачей, не сбросил эту проблему.
Я предупреждаю вас, что правильное выполнение этих процедур преобразования может быть затруднено. Существует огромное количество различных способов, которыми люди теряют время, самым последним примером высокого профиля был MS Zune. Не тряхните слишком много удовольствия от MS, хотя это легко испортить. Это не помогает в том, что существует несколько разных временных форматов, скажем, TAI против TT.
Я предпочитаю joda для арифметики даты и времени, потому что он намного читабельнее:
Date tomorrow = now().plusDays(1).toDate();
или
endOfDay(now().plus(days(1))).toDate()
startOfDay(now().plus(days(1))).toDate()
В очень особенном случае Если вы попросили сделать свой собственный класс даты, возможно, от вашего профессора по компьютерному программированию; Этот метод будет работать очень хорошо.
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;
}
}
}
лучшее, что можно использовать:
long currenTime = System.currentTimeMillis();
long oneHourLater = currentTime + TimeUnit.HOURS.toMillis(1l);
Аналогично, вы можете добавить MONTHS, DAYS, MINUTES и т.д.
вы можете использовать этот метод после import org.apache.commons.lang.time.DateUtils:
DateUtils.addDays(new Date(), 1));
Версия 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 для этих классов:
вы хотите, чтобы после дня найти этот код, попробуйте.
public Date getToDateAfterDays(Integer day) {
Date nowdate = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(nowdate);
cal.add(Calendar.DATE, day);
return cal.getTime();
}
Я нашел простой способ добавить произвольное время к объекту Date
Date d = new Date(new Date().getTime() + 86400000)
Где:
86400000 - 1 день в миллисекундах
3600000 - 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 хотел только один день добавить.
Подробнее можно найти в этой документации.
Я покажу вам, как мы можем это сделать в 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);
Java 8 Time API:
Instant now = Instant.now(); //current date
Instant after= now.plus(Duration.ofDays(300));
Date dateAfter = Date.from(after);