2012-08-30 74 views
5

使用joda-time-2.0版本库,我在想,哪个函数更适合从ISO日期构建(索引XML xs:dateTime格式)new DateTime(String)DateTime.parse(String)joda-time:new DateTime(String)vs DateTime.parse(String)

因为无论从返回相同的值不同的结果。例如:

new DateTime("2012-08-16T07:22:05Z") 
DateTime.parse("2012-08-16T07:22:05Z") 

由于ISOC年代学的不同,结果不同。首先说的是ISOChronology[Europe/Paris]和第二ISOChronology[UTC],虽然毫秒是相同的。

此外,here推荐使用ISODateTimeFormat.dateTimeNoMillis(),给出与使用第一个版本(new)相同的结果。

+0

问题是什么? – Ilya

+1

你使用的是什么版本? –

+0

@Ilya用粗体编辑问题。虽然我这吼声是一个晶莹剔透的问题... – lucasvc

回答

12

这两种方法使用两种不同的转换方法:构造使用的InstantConverter一个实例,其中在字符串的情况下是一个StringConverter并且还不支持读取来自传递的字符串的时区,而parse方法使用知道如何解析时区的DateTimeFormatter

虽然在理论上这两种格式接受ISO日期时间格式,我认为构造函数是越野车,因为它总是使用系统时区,而不是字符串中指定的一个。这与该构造函数接受的其他可能值不一致,这些值确实考虑了时区和时区偏移量。例如,此构造函数将返回UTC时区的DateTime对象:

new DateTime(DateTime.parse("2012-08-16T07:22:05Z")) 
+0

所以,这是更好地使用'DateTime.parse',对不对? – lucasvc

+0

构造函数是否真的被窃听或是设计忽略的时区? – Scorpio

+0

因为如果不是一个字符串,我们通过另一个JodaTime对象,确实有一个时区的时区也是不可忽视的,我会说这是一个错误,但它应该由开发商JodaTime确认。 –

相关问题