Я работаю над проектом для школы, и я в полной растерянности. Вот фон:
Я работаю над приложением JavaFX для встреч, которое будет запускаться локально, поэтому мне не нужно беспокоиться о том, что часовой пояс на стороне сервера будет отличаться от реального времени пользователя. Я не могу использовать любые сторонние библиотеки. В настоящее время приложение использует DatePicker и два элемента управления ComboBox для ввода пользователем значений Date, Hour и Minute. Они хранятся в объекте Appointment в переменной Instant (начало) с традиционными методами get / set. Я успешно пишу в БД из элементов управления, и мои результаты отображаются так, как я и ожидал. Если я выберу 31/06/2019 и 12:00, а затем запишу его в БД, он отобразится в БД, которая хранится в столбце «Начало» (с типом данных DATETIME) как 2019-12-31 17:00: 00. Я нахожусь в CST, поэтому мое смещение UTC составляет -5 часов. До этого момента я считаю, что все персиковое.
Отсюда что-то идет на юг. Я сопоставляю каждое из назначений БД с объектом ObservableList, используя что-то подобное для каждого элемента в ResultSet
Instant start = i_rs.getTimestamp("start").toInstant();
Return newAppointment(start);
Проверка значения переменной Instant Start дает мне:
2019-12-31T17: 00
как я и ожидал. Однако я не могу успешно преобразовать это время в часовой пояс пользователя. Самое близкое, что я пришел, это:
ZonedDateTime localStartDate = currentAppointment
.getStart()
.atZone(ZoneId.systemDefault());
Но это возвращает
2019-12-31T17: 00-05: 00
Я тоже пробовал
ZonedDateTime zdt = date.atZone(ZoneOffset.systemDefault());
Но это превращает мое время в неправильное направление, оставляя меня с
2019-12-31T22: 00
Я работал над этой маленькой "легкой" частью более суток. Любая помощь будет принята с благодарностью.