Java IBATIS TypeHandlerCallback getResult(ResultGetter getter),用于将EST时间转换为UTC时间

Java IBATIS TypeHandlerCallback getResult(ResultGetter getter),用于将EST时间转换为UTC时间,java,oracle,date,timezone,ibatis,Java,Oracle,Date,Timezone,Ibatis,谢谢你的解决方案,但对我来说不行。我正在处理一个场景,其中我使用oracle数据库中的时间和时区信息设置日期。我使用Ibatis提取此日期并将其分配给java日期对象。我实现了我的TypeHandlerCallback,如下所示: 公共类DateTimezoneTypeHandler实现TypeHandlerCallback{ public void setParameterParameterSetter setter,对象参数 抛出SQLException {java.util.Date Da

谢谢你的解决方案,但对我来说不行。我正在处理一个场景,其中我使用oracle数据库中的时间和时区信息设置日期。我使用Ibatis提取此日期并将其分配给java日期对象。我实现了我的TypeHandlerCallback,如下所示:

公共类DateTimezoneTypeHandler实现TypeHandlerCallback{

public void setParameterParameterSetter setter,对象参数 抛出SQLException

{java.util.Date Date=java.util.Date参数;if Date==null setter.setNullTypes.TIMESTAMP;else{TIMESTAMP TIMESTAMP=new TIMESTAMP Date.getTime;Calendar Calendar=Calendar.getInstanceTimeZone.getTimeZoneUTC;setter.settimestamp,Calendar;}

@重写公共对象getResultResultGetter getter引发SQLException{

日历日历=Calendar.getInstanceTimeZone.getTimeZoneUTC

返回getter.getTimestampcalendar

}

@重写字符串s的公共对象值{抛出新的UnsupportedOperationException DateTimezoneTypeHandler.valueOf不受支持。}

我已将日期存储在EST时区的数据库中,因此getter的日期位于EST时区。现在,当从数据库读取日期时,会调用getResult函数,但EST日期不会转换为UTC/GMT时区。它正在将具有EST时区的日期转换为具有本地系统时区的日期

**公共对象getResultResultGetter getter引发SQLException{

日历日历=Calendar.getInstanceTimeZone.getTimeZoneUTC

返回getter.getTimestampcalendar

}**

以下是我的sql映射:

我不明白这个方法实现的问题是什么,为什么它不是必需的功能


如果有人对此问题有任何建议/解决方案,请告诉我。我会非常感激的。

问题似乎是你没有真正翻译时间。设置时区不会导致日历将当前值转换为新时区。下面是一些将GMT-5(也称EST)时区转换为UTC的示例代码。请注意,我使用的是Calendar.add,而不是Calendar.roll


FWIW,我们公司已停止将日期和时间作为Oracle时区存储在数据库中。对外部配置的依赖太多。相反,我们会采取以下措施:

由于请求currentTimeMillis返回一个,因此我们为Java Date类创建了一个TypeHandler,它将日期/时间存储在数据库中的数字列中 因为从epoch读取毫秒对人类来说很困难,所以我们向数据库中添加了两个函数来从/转换为毫秒,这样管理员仍然可以编写查询,如果他们愿意的话 这样做的好处是可以避免JVM之外的任何智能时间处理。当人们在国外浏览器中输入日期,将其传递到服务器应用程序中,然后将其传递到数据库中时,这尤其方便

如果您确实想在数据库中存储日期,有时您必须执行这些操作,我个人建议您更轻松地处理日期、时间、公历等。

谢谢您提供的解决方案,但它对我来说不起作用有点脱离上下文。。。

    public static void main(String[] args)
    {
        Calendar calendar = Calendar.getInstance();
        Date date;
        int rawOffset;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("M/d hh:mm;ss a");
        TimeZone timeZone;

        date = calendar.getTime();
        System.out.println(simpleDateFormat.format(date));

        timeZone = TimeZone.getTimeZone("GMT-5");
        rawOffset = timeZone.getRawOffset();
        System.out.println(rawOffset);
        calendar.add(Calendar.MILLISECOND, rawOffset);

        date = calendar.getTime();
        System.out.println(simpleDateFormat.format(date));
    }