2016-03-07 71 views
0

我有一个包含两个日期格式例如一个XML段2016-03-22和2016-03-29。它们从XML解析为String对象,然后转换为符合ISO8601的日期对象。在此过程中,2016-03-22被解释为格林威治标准时间2016年3月22日00:00:00,而第二日期被解释为2016年3月29日00:00:00 BST。您将看到一个格林尼治标准时间TZ另一个在BST时区。这意味着计算这些日期之间的天数会比我预期的要少一天。时钟将在今年3月30日前进,我不确定是否有相关性,因为这种情况发生在接近但不包括3月30日的日期范围内。今年也是一个闰年,不能确定这是否与所涉日期有关。从XML解析ISO8601日期具有不同的时区

有你为什么这会发生什么想法?

感谢, 蒙古包。

+0

什么是你的语言环境? – choroba

+0

是从BST时区的计算机中捕获的日期吗?将字符串日期解析为DateTime对象时,必须指定捕获日期的时区。 PC使用GMT存储日期时间。每当DateTime对象从/转换为字符串时,都会使用计算机TimeZone设置执行​​转换。如果在与PC设置不同的时区捕获数据,必须告诉解析器收集哪些时区设置数据。 – jdweng

+0

这些日期是在GMT时区的计算机上提交的。日期从XML解析为字符串对象,然后解析为日期时间对象。由于它们是以YYYY-MM-DD格式从XML传入的,没有TZ信息,所以我认为问题出现在ISO8601日期解析方法中,并且实现中的某些内容存在错误。但想了解为什么这可能会首先发生。 – glawlor

回答

0

仅供参考,大部分(如果不是全部)欧洲各国改为夏令时周日3月27日在这也说明了BST(英国夏令时间)时区,你解析“2016年3月29日”的时候得到的。

然而,如果你进行基于输入数据,原本不包括时区信息周期或持续时间的计算,你应该会喜欢这个结果。

如果您使用的是Java,我建议您使用Java 8中引入的优秀java.time API。如果Java 8不是选项,请查找Joda Time或其C#(.NET)对应程序Noda Time。