MySQL的日期值

问题描述 投票:0回答:1

我的代码有问题。

我有带有MySQL数据库的JavaEE应用。我有具有可变的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。

一些提示如何解决呢?我一无所知。

我忘记了,DB中的值正确!我使用素数,但是我使用自己的日期转换器,它返回与“默认”相同的问题。在Java中,我使用get set fot:

@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;
    }
}

EDIT2:

<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>
java mysql jdbc
1个回答
0
投票

由于您使用它来存储出生日期,所以在MySQL中使用DATE类型而不是DATETIME,那么它将不会考虑来自不同时区的时间,这可能会解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.