ТЛ; др
Вставьте момент через два часа.
myPreparedStatement // Use a `PreparedStatement` to exchange data with your database, to avoid SQL-injection risk. Use JDBC 4.2 or later for *java.time* support.
.setObject( // Fill a placeholder `?` in your SQL statement.
… , // Specify which placeholder.
OffsetDateTime // Use `OffsetDateTime` to specify a moment in JDBC 4.2. Optionally, your JDBC might support `Instant` or `ZonedDateTime` types, while support for `OffsetDateTime` is required.
.now( // Capture the current moment.
ZoneOffset.UTC // Set the offset-from-UTC to zero. We do not need to account for any time zone in this particular business scenario.
) // Returns an `OffsetDateTime` object.
.plus( // Adds a span-of-time to the moment held in the `OffsetDateTime` object.
Duration.parse( "PT2H" ) // Specify the span-of-time using standard ISO 8601 format for a duration.
) // Per Immutable Objects pattern, returns a new `OffsetDateTime` rather than changing ("mutating") the original.
)
Подробнее
У меня есть строковое значение как «02:00:00», поэтому в основном мне нужно добавить 2 часа к этому времени и получить значение будущей метки времени, которое необходимо вставить
Это плохой способ сообщить промежуток времени, не привязанный к временной шкале.
Стандартный способ - это PnYnMnDTnHnMnS
, где P
отмечает начало, а T
отделяет годы-месяцы-дни от часов-минут-секунд. Так что 2 часа - это PT2H
.
Чтобы разобрать такую строку, используйте класс Duration
для часов-минут-секунд (или Period
для лет-месяцев-дней).
String input = "PT2H" ;
Duration d = Duration.parse( input ) ;
Вы можете сгенерировать такую строку.
String output = Duration.ofHours( 2 ).toString() ; // Yields "PT2H" string.
Захватить текущий момент в UTC .
OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;
Добавьте продолжительность в два часа, используя стандартные обозначения ISO 8601 .
Duration d = Duration.parse( "PT2H" ) ;
ZonedDateTime odtLater = odt.plus( d ) ; // Add 2 hours to the current moment.
Отправьте это в свою базу данных, используя JDBC 4.2 или более позднюю версию.
myPreparedStatement.setObject( … , odtLater ) ;
индексирование.
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
О 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 .