ТЛ; др
LocalDateTime.parse(
"2018-01-23 01:23:45".replace( " " , "T" )
).plusHours( 2 )
java.time
Современный подход использует классы java.time , добавленные в Java 8, Java 9 и более поздние версии.
пользователь вводит в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС
Разобрать эту входную строку в объекте даты и времени. Ваш формат почти соответствует стандартному формату ISO 8601, используемому по умолчанию в классах java.time для разбора / генерации строк. Чтобы полностью соответствовать, замените ПРОБЕЛ в середине на T
.
String input = "2018-01-23 01:23:45".replace( " " , "T" ) ; // Yields: 2018-01-23T01:23:45
Анализировать как LocalDateTime
, учитывая, что на вашем входе отсутствует индикатор часового пояса или смещения от UTC.
LocalDateTime ldt = LocalDateTime.parse( input ) ;
добавить два часа
Классы java.time могут сделать математику за вас.
LocalDateTime twoHoursLater = ldt.plusHours( 2 ) ;
часовой пояс
Имейте в виду, что LocalDateTime
не представляет момент, точку на временной шкале. Без контекста часового пояса или смещения от UTC это не имеет никакого реального значения. «Местная» часть названия означает любой населенный пункт или no населенный пункт, а не какой-либо один конкретный населенный пункт. Просто сказать «полдень 21 января» может означать полдень в Окленде, Новая Зеландия, что происходит на несколько часов раньше, чем полдень в Париже, Франция.
Чтобы определить фактический момент, вы должны указать зону или смещение.
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = ldt.atZone( z ) ; // Define an actual moment, a point on the timeline by giving a context with time zone.
Если вы точно знаете предполагаемый часовой пояс, примените его до , добавив два часа. Класс LocalDateTime
предполагает простые общие 24-часовые дни при выполнении математики. Но в разных часовых поясах в разные даты дни могут длиться 23 или 25 часов или могут быть другой длины. Таким образом, для получения правильных результатов в зональном контексте добавьте часы к вашему ZonedDateTime
, а не LocalDateTime
.
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы вытесняют старые классные устаревшие классы даты и времени, такие как java.util.Date
, Calendar
и & SimpleDateFormat
.
Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .