2016-12-15 6 views
-1

Я пытаюсь добавить/преобразовать время в формате 24 часа (20:20) с "01/01/1900". Я использую базу данных sybase. Мне нужно сохранить его в базе данных sybase (поле datetime), например, "01/01/1900 20:20:00". 24 hour time format вводится пользователем. Я хотел бы добавить его к этой дате "01/01/1900". При извлечении из базы данных я также хотел бы преобразовать поле времени даты в поле времени в 24 hour format Должен ли я использовать григорианский календарь/должен преобразовать строку в формат времени даты. Как я могу это достичь. Поиск предложенийДобавить формат 24-часового времени с форматом даты Sybase

+0

В Javascript или на Java? Вы ошибочно отметили его обоих. –

+0

Java, извините за ошибку. – Praveen

+0

@EngineerDollery Я прошу о предложениях :) Спасибо, что комментировали! – Praveen

ответ

0

Используйте объекты, не струнные

работу вашего драйвера JDBC является перевод между объектами Java и собственный формат данных базы данных.

На стороне Java избегайте неприятных старых классов времени, таких как java.util.Date и Calendar. Теперь они устарели, вытесняются классами java.time.

Класс LocalTime предназначен для значения времени суток без даты и без часового пояса.

Ваша входная строка соответствует стандартным форматам ISO 8601. По умолчанию классы java.time используют эти стандартные форматы. Поэтому нет необходимости указывать формат разбора.

LocalTime lt = LocalTime.parse("20:21"); 

Аналогичным образом, LocalDate для формата даты.

Для получения текущей даты требуется часовой пояс.

ZoneId z = ZoneId.of("America/Montreal"); 
LocalDate ld = LocalDate.now(z); 

В случае возникновения этого вопроса мы хотим получить твердую дату.

LocalDate ld = LocalDate.of(1900 , Month.JANUARY , 1); 

Поместите эти кусочки вместе и назначьте их предполагаемый часовой пояс.

ZonedDateTime zdt = ZonedDateTime.of(ld , lt , z); 

zdt.toString(): 016-12-17T20: 21-05: 00 [Америка/Монреаль]

См live code in IdeOne.com.

Пройдите в свою базу данных через JDBC через PreparedStatement::setObject.

myPS.setObject(… , zdt); 

Если ваш драйвер не поддерживает JDBC 4.2, падают обратно, используя старые java.sql типы с драйвером. Посмотрите на новые методы, добавленные в старые классы для преобразования.

java.sql.Timestamp ts = java.sql.Timestamp.from(zdt.toInstant()); 
myPS.setTimestamp(… , ts); 

Эти вопросы были рассмотрены во многих других Вопросах и Ответы. Поиск переполнения стека для более широкого обсуждения и других примеров.