您好,感谢您的阅读。
我目前面临的挑战是将表示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
答案 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。