Обновление таблицы с отметкой времени при попытке снова преобразовать в UTC? - PullRequest
0 голосов
/ 30 ноября 2018

Я работаю над планировщиком встреч для клиента, и меня очень расстраивает ошибка, с которой я сталкиваюсь из-за того, что мне постоянно приходится иметь дело с переформатированием дат между utc, строками (с указанием времени начала, например, с 8:00 доместное время, затем местное время и т. д.).

Мне удалось изолировать его от одного вызова метода, но я не могу найти, как в мире разрушается мое обновление sql.

Запись в моей таблице перед вызовом 'update'

 appointmentId, customerId, title, description, location, contact, url, start, end, createDate, createdBy, lastUpdate, lastUpdateBy
'21', '3', 'test', 'Consultation', '1', '1', '1', '2018-11-30 18:00:00', '2018-11-30 19:00:00', '2018-11-30 16:17:39', 'test', '2018-11-30 16:17:39', 'test'

Как видно из вышеприведенного, есть две действительные метки времени в 18:00:00 и в 19:00:00, поэтому встреча будет в это время в UTC

private boolean updateForm(){
    LocalDate localDate = datePicker.getValue();
    LocalTime startTime =  LocalTime.parse(startTimeField.getSelectionModel().getSelectedItem(), timeDTF);
    LocalTime endTime = LocalTime.parse(endTimeField.getSelectionModel().getSelectedItem(), timeDTF);

    LocalDateTime startDT = LocalDateTime.of(localDate, startTime);
    LocalDateTime endDT = LocalDateTime.of(localDate, endTime);

    ZonedDateTime startUTC = startDT.atZone(ZoneId.systemDefault()).withZoneSameInstant(ZoneId.of("UTC"));
    ZonedDateTime endUTC = endDT.atZone(ZoneId.systemDefault()).withZoneSameInstant(ZoneId.of("UTC"));            

Timestamp startsqlts = Timestamp.valueOf(startUTC.toLocalDateTime()); //this value can be inserted into database
    Timestamp endsqlts = Timestamp.valueOf(endUTC.toLocalDateTime()); //this value can be inserted into database        


    System.out.println("Timestamp value start: " + startsqlts.toString() + " end: " + endsqlts.toString());

//OUTPUT OF ABOVE
//"Timestamp value start: 2018-11-30 18:00:00.0 end: 2018-11-30 19:00:00.0"
    try{
            PreparedStatement st = sqlConnection.prepareStatement("UPDATE appointment SET customerId = ?, title = ?, description = ?, start = ?, end = ?, lastUpdate = CURRENT_TIMESTAMP, lastUpdateBy = ? WHERE appointmentId = ?");

            st.setString(1, Integer.toString(customerTable.getSelectionModel().getSelectedItem().getId().getValue().intValue()));
            st.setString(2, titleField.getText());
            st.setString(3, typeField.getValue());
            //Inserting timestamps directly
            st.setTimestamp(4, startsqlts);
            st.setTimestamp(5, endsqlts);
            st.setString(6, mainScheduler.currentUser);
            st.setString(7, Integer.toString(appointment.getId().getValue().intValue()));

            if(st.executeUpdate() > 0){
                System.out.println("Updated appointment");

                return true;
            }else{
                System.out.println("Failed to update appointment");
            }

    }catch(Exception e){
        e.printStackTrace();
    }
    return false;
}

Как вы можете видеть выше из выходных данных, которые я поместил под печатью, временные метки действительны, но после выхода из этого вызова и просмотра таблицы я получаю следующее: ( Ничто иное не изменяет мою таблицу между этим вызовом и временемЯ проверяю ):

appointmentId, customerId, title, description, location, contact, url, start, end, createDate, createdBy, lastUpdate, lastUpdateBy
'21', '3', 'test', 'Consultation', '1', '1', '1', '2018-12-01 02:00:00', '2018-12-01 03:00:00', '2018-11-30 16:17:39', 'test', '2018-11-30 16:29:00', 'test'

Что показывает, что загрузка добавляет 8 часов к уже отформатированной метке времени.

Как это исправить?Это была единственная проблема, из-за которой мое приложение не работало почти неделю, и я просто изолировал его, поэтому любая помощь очень ценится.

Для справки: я на 8 часов отстал от UTC, поэтому мое местное время + 8 часов= UTC.

РЕДАКТИРОВАТЬ: Если не очевидно, я вызываю обновление без изменений, чтобы было легче увидеть изменения отражены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...