午夜日期与时区发送到时区无知系统

时间:2014-09-12 10:12:13

标签: java coldfusion timezone

首先快速总结我的问题,然后详细说明。

我的日历日期为00:00:00,因为它对业务不重要。此值将发送到Web服务,该Web服务生成XML,其中值以下列格式结束:2014-09-12T07:55:07.000Z。我注意到这是转换为+0时区(UTC)的原始值(我们的是CET,+ 1,但目前是CEST,+ 2,因为DST)。

我目前不知道读取XML的系统是考虑时区还是提取2014-09-12并假设它在+2时区。

我注意到发送“2014-09-12 00:00:00”本地时间(tz +2)最终为2014-09-11T22:00:00.000Z。没有什么大惊喜,它转换了它...但如果它被另一个系统解释为它,它会认为日期比它应该早一天。

可以采取哪些措施来确保按预期解释?

我正在考虑使用正午而不是午夜来确保时区转换不会影响解释,但这感觉就像一个肮脏的把戏。或者也许我应该作弊并将日历时区设为+0,以便在放入XML时不会时移?


Q&安培; A

为什么“将日历发送到网络服务”?

应用程序位于Coldfusion 7中。为了与SOAP Web服务进行通信,服务器生成一组Java类,这些类适合webservice期望的参数定义。该参数显然是一个具有大量属性和子属性的大对象。因此,实例化主Java类并使用setter和其他类的进一步instanciations来“填充”所有属性。

使用日历吗?

是的,无法更改Java对象定义。它期望所有日期的日历。

这是什么2014-09-11T22:00:00.000Z格式?

我不知道。这似乎是最终系统对日期的期望。

您应该使用JODA

除非JODA类扩展Calendar并且与Java 1.3兼容(Coldfusion服务器上的当前Java版本 - 是的,它是旧的),我怀疑它是否会起作用。

你可以在另一个系统上做多少?

另一个系统是另一个团队的责任,显然很难改变。我希望解决方案必须在我们的应用程序中找到。

1 个答案:

答案 0 :(得分:4)

虽然Calendar对象中的时间值对您的业务并不重要,但 对您使用且无法控制的Web服务非常重要。日历对象指定了一个即时时间,因此您必须确保即时在您认为重要的那一天。我推荐你使用正午,正如你的建议。我还建议您在UTC时区中创建Calendar对象:

Calendar myCalendar=Calendar.getInstance(TimeZone.getTimeZone("UTC"));