Java - 将符合xs:date格式的字符串转换为Oracle时间戳格式

时间:2011-08-09 15:46:01

标签: java xml oracle datetime

您好,感谢您的阅读。

我目前面临的挑战是将表示xs:date格式的日期/时间的字符串转换为Oracle时间戳。

我开始的字符串看起来像 - “2011-07-12T16:20:02-04:00”

我需要将时区偏移量包含在我的Oracle时间戳中。在转换过程发生后,我应该得到一个看起来像 -

的时间戳

“2011-07-12 12:20:02.0000”

请注意,在上面的示例中,时区偏移已计入时间戳。

有谁知道如何做到这一点?我尝试使用SimpleDateFormat对象首先从字符串创建java.util.Date对象,然后将其转换为java.sql.Timestamp对象。这里的问题是没有考虑时区,我认为java.util.Date对象无论如何都会忽略时区偏移。

希望有人可以帮助我...

编辑:已解决 - 这是我最终使用的代码 -

Calendar Cal = DatatypeConverter.parseDateTime("2011-07-12T16:20:02+02:00");
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        df.setTimeZone(TimeZone.getTimeZone("GMT"));
        System.out.println(df.format(Cal.getTime()));

再次感谢您的阅读,

Zachary Carter

2 个答案:

答案 0 :(得分:2)

DateFormats有时区。您基本上需要使用正确的格式配置SimpleDateFormat来解析输入时间戳(请参阅下面的注释)。从技术上讲,它包含时区信息,因此在输入格式化程序上配置的TimeZone无关紧要(为了安全起见,您可以使用“GMT”)。那么,看起来你想要使用GMT时区输出时间戳(例如没有时区偏移),所以你可以用你想要的输出格式创建另一个SimpleDateFormat,用“GMT”TimeZone配置。

SimpleDateFormat可能无法处理xsd输入格式,因此您可以使用jaxb utils为您处理,请参阅:http://download.oracle.com/javase/6/docs/api/javax/xml/bind/DatatypeConverter.html#parseDateTime(java.lang.String

答案 1 :(得分:1)

如果使用正确的格式,SimpleDateFormat会考虑时区。尝试运行此代码并查看结果:

    String s = "2011-07-12T16:20:02-0400";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
    System.out.println(sdf.format(sdf.parse(s)));

请务必将-04:00转换为-0400。