Как правильно вставить дату в мою базу данных, используя Java с помощью Spring / Hibernate (неправильные часы в моей БД)? - PullRequest
0 голосов
/ 23 октября 2019

Так что недавно я работал с типом данных Calendar и Date в своем проекте и не мог вставить (и получить) правильное количество часов в (из) мою базу данных (используя Spring и Hibernate / MySql5Dialect).

Когда я пытался использовать хранимую процедуру в своем приложении Spring, которая бы выбирала некоторые даты (тип данных DATETIME) из БД, объект, возвращаемый в Java, всегда находится за час до фактической даты в моей БД (например, 2019-03-30 09:00:00 в моем БД, и я получаю 2019-03-30 08:00:00 от моего обслуживания). Теперь, когда я вызываю ту же процедуру в mysql workbench, она работает отлично.

Теперь я заметил, когда пытался вставить запись с датой внутри нее из моего весеннего приложения, например, 2019-03-30 09:00:00, я получаю 2019-03-30 08:00:00 в своей базе данных, вот как я вставил дату:

private PatientAppointmentDTOR createPatientAppointmentDTOR() {
        PatientAppointmentDTOR dtor = factory.manufacturePojo(PatientAppointmentDTOR.class);
        dtor.setCpId(5L); // foreign keys...
        dtor.setBranchId(2L);
        dtor.setPtId(32L);
        dtor.setEmployeeId(55L);
        dtor.setInDepartmentId(7L);
        dtor.setPatientAppointmentStatusId(20L);
        Calendar cal1 = Calendar.getInstance();
        cal1.set(Calendar.YEAR, 2019);
        cal1.set(Calendar.MONTH, 2);
        cal1.set(Calendar.DAY_OF_MONTH,30);
        cal1.set(Calendar.HOUR_OF_DAY, 12);
        cal1.set(Calendar.MINUTE, 0);
        cal1.set(Calendar.SECOND, 0);
        cal1.set(Calendar.MILLISECOND, 0);
        Date start = cal1.getTime();
        Calendar cal2 = Calendar.getInstance();
        cal2.set(Calendar.YEAR, 2019);
        cal2.set(Calendar.MONTH, 2);
        cal2.set(Calendar.DAY_OF_MONTH,30);
        cal2.set(Calendar.HOUR_OF_DAY, 12);
        cal2.set(Calendar.MINUTE, 30);
        cal2.set(Calendar.SECOND, 0);
        cal2.set(Calendar.MILLISECOND, 0);
        Date end = cal2.getTime();
        dtor.setStartTime(start);
        dtor.setEndTime(end);
        Company company = companyService.getEntityById(5L);
        GroupDTOS gdtos = groupService.getDTOById(2L);
        when(auth.userDetails())
         .thenReturn(EntityFactory
         .createUserDetails(DBStaticFields.Role.CLINIC_ADMIN, company, gdtos, factory));
        return dtor;
    }

, а затем я просто вставил это в свою базу данных, используя этот тест JUnit:

    @Test
    @DisplayName("test insertion")
    void testInsert() {
        PatientAppointmentDTOR dtor = this.createPatientAppointmentDTOR();
        PatientAppointmentDTOS dtos = patientAppointmentService.insert(dtor);
        assertThat(dtos).isNotNull();
        assertThat(dtos.getId()).isNotNull();
    }

Так что да, когда я вставляю эти значения из моего приложения, startDate в моей базе данных - 2019-03-30 11:00:00, а endDate - 2019-03-30 11:30:00,У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 24 октября 2019

Как указал akuma8, проблема была в часовом поясе, установленном в свойствах моего приложения. Если у кого-то есть подобная проблема, просто установите правильный часовой пояс "& serverTimezone = $$$" в свойствах вашего приложения, где установлено соединение с базой данных, теперь все соответствует правильно.

Спасибо akuma8!

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