MySQL значение даты - PullRequest
       8

MySQL значение даты

0 голосов
/ 02 марта 2020

У меня проблема с моим кодом.

У меня есть приложение JavaEE с MySQL дБ. У меня есть объект, который имеет переменную dateOfBirth. Если я установлю эту переменную на 20/5/1978 и сохраню форму, значение si изменится на 19/5/1978. Через отладку я нахожу значение 19/5/1978 23:00:00. У меня есть проблемы с часовым поясом. (но это не для каждой даты ... приходят проблемы с летним временем?)

Соединение с БД:

?useUnicode=true&useGmtMillisForDatetimes=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&useTimezone=true&serverTimezone=Europe/Prague

, а system_time_zone на сервере - CET, time_zone - SYSTEM.

Несколько советов, как это решить? Я не в курсе.

Я забыл, значение в БД правильное! Я использую простые символы, но я использую собственный конвертер дат, который возвращает ту же проблему, что и «по умолчанию». В java я использую получить набор для:

@NotNull(message = "{client.birthDate.NotNull}")
@Temporal(TemporalType.DATE)
private Date birthDate;

РЕДАКТИРОВАТЬ: я использую этот конвертер

@ApplicationScoped
@Named(value = "dateTimeConverter")
@FacesConverter("dateTimeConverter")
public class DateTimeConverter implements Converter {


    @SneakyThrows
    @Override
    public Object getAsObject(FacesContext context, UIComponent component, 
    String value) {
        System.out.println("v:" + value);
        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
        Date date = sdf.parse(value);
        System.out.println("f:" + date);
        return date;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, 
    Object value) {
        System.out.println("to:" + value.toString()); //HERE I get 
    19/05/1978!!!
        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
        System.out.println("timezone:" + sdf.getTimeZone());
        sdf.setTimeZone(TimeZone.getTimeZone("Europe/Prague"));
        String date = sdf.format(value);
        System.out.println("s:" + date);
        return date;
    }
}

РЕДАКТИРОВАТЬ 2:

<p:calendar id="#{id}_birthDate" placeholder="#{msg.BirthDate}" yearRange="c-100:c" value="#{client.birthDate}" navigator="true" pattern="dd.MM.yyyy" disabled="#{ViewBean.z.locked}"> <f:converter converterId="dateTimeConverter"/> <p:ajax listener="#{ViewBean.invalidate()}" update="@(.buttonPanelClass)" event="dateSelect"/> </p:calendar>
...