tl; dr
LocalDate
.now(
ZoneId.of( "Pacific/Auckland" )
)
.plusDays( 3 )
java.time
Вы используете ужасные классы даты и времени, которые были вытеснены годы назад классами java.time спринятие JSR 310. Никогда не используйте Date
снова.
По-видимому, вы начинаете с long
в виде количества миллисекунд с момента обращения эпохи первого момента 1970 года в UTC.1970-01-01T00: 00: 00Z.Считайте это число как Instant
, момент в UTC с разрешением наносекунд.
Instant instant = Instant.ofEpochMilli( myCountOfMilliseconds ) ;
Когда вы говорите «добавить дни», что вы конкретно имеете в виду?
Вы имеете в виду 24-часовые куски времени ?Используйте Duration
.
Duration d = Duration.ofDays( 3 ) ; // Add three multiplied by 24 hours.
Instant instantLater = instant.plus( d ) ;
Вы имеете в виду дней, как в датах в календаре?Часовой пояс имеет решающее значение при определении даты.В любой момент времени дата меняется по всему земному шару в зависимости от зоны.Например, через несколько минут после полуночи в Париж Франция - это новый день, в то время как "вчера" в Монреаль Квебек .
Если часовой пояс не указан,JVM неявно применяет свой текущий часовой пояс по умолчанию.Это значение по умолчанию может измениться в любой момент во время выполнения (!), Поэтому ваши результаты могут отличаться.Лучше явно указать желаемый / ожидаемый часовой пояс в качестве аргумента.Если критично, подтвердите зону с вашим пользователем.
Укажите правильное имя часового пояса в формате Continent/Region
, например America/Montreal
, Africa/Casablanca
или Pacific/Auckland
,Никогда не используйте 2-4 буквенные сокращения, такие как EST
или IST
, поскольку они не истинные часовые пояса, не стандартизированы и даже не уникальны (!).
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
ZonedDateTime zdtLater = zdt.plusDays( 3 ) ; // Add three calendar days, with same time-of-day but adjusted as needed to handle anomalies such as Daylight Saving Time (DST).
Если вам нужна только дата без времени суток и без часового пояса, извлеките LocalDate
.
LocalDate ld = zdt.toLocalDate() ;
LocalDate ldLater = ld.plusDays( 3 ) ;
, используя в основном текущийdate
Если вы хотите начать только с даты, используйте LocalDate.now
.
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
LocalDate today = LocalDate.now( z ) ;
LocalDate threeDaysFromToday = today.plusDays( 3 ) ;
About java.time
Фреймворк java.time встроен в Java 8 и более поздние версии.Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на java.time классы.
Вы можете обмениваться java.time объектами непосредственно с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
ThreeTen-Extra Проект расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .