有问题,我有格式化以下日期/时间问题:格式化一个特定的日期/时间格式
2013-01-10T17:04:24.3787635-02:00
现在,我明白了2013-01-10
是日期(明显)。
17:04:24.3787635
可能是时间,但我不知道点后的数字是什么意思。
-02:00
我认为这是时区(GMT)。
我该如何解析这在java中? (也许使用JodaTime)。
有问题,我有格式化以下日期/时间问题:格式化一个特定的日期/时间格式
2013-01-10T17:04:24.3787635-02:00
现在,我明白了2013-01-10
是日期(明显)。
17:04:24.3787635
可能是时间,但我不知道点后的数字是什么意思。
-02:00
我认为这是时区(GMT)。
我该如何解析这在java中? (也许使用JodaTime)。
你可以使用JodaTime解析此日期:点(.
)后
String time = "2013-01-10T17:04:24.3787635-02:00";
DateTimeFormatter df = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ");
DateTime dateTime = df.parseDateTime(time);
的数值是由S
在JodaTime's
DateTimeFormat表示秒分数。 Z
代表时区模式。
尝试使用这种模式:
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
可以以这种格式来解析日期:
2001-07-04T12:08:56.235-07:00
虽然3787635
源字符串的麻烦。它看起来不像毫秒。
查看java.text.SimpleDateFormat
了解更多关于图案的细节。
您也可以尝试DatatypeConverter.parseDateTime
,它返回java.util.Calendar
对象。
DatatypeConverter.parseDateTime("2013-01-10T17:04:24.3787635-02:00").getTime()
上述语句执行时没有任何错误。
时间字符串的格式是ISO8601格式。 JodaTime类ISODateTimeFormat
将直接支持该格式。但是,您将失去超过毫秒的精度。
String time = "2013-01-10T17:04:24.3787635-02:00";
DateTime dateTime = ISODateTimeFormat.dateTime().parseDateTime(time);
只有使用javax.xml.XMLGregorianCalendar才能正确解析此格式。您不能使用SimpleDateFormat,因为它接受SSS为毫秒数,而不是秒数的小数部分。
String s = "2013-01-10T17:04:24.3787635-02:00";
DatatypeFactory dtf = DatatypeFactory.newInstance();
Date date = dtf.newXMLGregorianCalendar(s).toGregorianCalendar().getTime();
非常感谢您的帮助。尽管我有最后一个问题。当我执行'dateTime.getZone()。getID()'时,它返回给我'America/Sao_Paulo'。我期待'GMT-3'。有没有办法让我回到我期望的目标,或者它只是将时区应用到的地方作为参考返回给我? – 2013-03-15 22:27:42