Java 带时区的午夜日期发送到时区系统

Java 带时区的午夜日期发送到时区系统,java,coldfusion,timezone,Java,Coldfusion,Timezone,首先快速总结我的问题,然后在下面进一步详细介绍 我有一个日历日期,时间是00:00:00,因为它对业务不重要。该值被发送到一个Web服务,该Web服务生成一个XML,其中该值以以下格式结束:2014-09-12T07:55:07.000Z。我注意到,这是转换为+0时区(UTC)的原始值(我们的是CET+1,但由于DST,目前是CEST+2) 我目前不知道读取XML的系统是否考虑了时区,或者是否会提取2014-09-12,并假设它位于+2时区 我注意到,发送“2014-09-12 00:00:00

首先快速总结我的问题,然后在下面进一步详细介绍

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

我目前不知道读取XML的系统是否考虑了时区,或者是否会提取
2014-09-12
,并假设它位于+2时区

我注意到,发送“
2014-09-12 00:00:00
”本地时间(tz+2)在XML中以
2014-09-11T22:00:00.000Z
结尾。没什么大不了的,它改变了它。。。但是如果被另一个系统解释为是,它会认为日期比它应该的早一天

如何确保这一点被理解为预期目的?

我想用中午而不是午夜来确保时区转换不会影响口译,但这感觉像是一个肮脏的把戏。或者我应该作弊,让日历时区为+0,这样在放入XML时就不会发生时移


问答 为什么要“向Web服务发送日历”?

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

您必须使用日历吗?

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

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

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

您应该使用JODA

除非JODA类扩展了Calendar并与Java1.3(Coldfusion服务器上的当前Java版本——是的,它是旧版本)兼容,否则我怀疑它是否能工作

在另一个系统上可以执行多少操作?


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

虽然日历对象中的时间值对您的业务并不重要,但对您使用的Web服务来说很重要,您无法控制它。calendar对象在时间上指定了一个瞬间,因此您必须确保该瞬间位于对您很重要的一天中。我建议你使用正午,正如你已经建议的那样。我还建议您在UTC时区中创建日历对象:

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

这可能有助于您澄清一个问题:“2014-09-11T22:00:00.000Z”是ISO-8601格式的日期时间:。您的问题措辞很好,但不清楚您是否控制了web服务?听起来你的问题就在这里,因为它将日期视为日期/时间。一个简单的旧日期不应该有任何考虑。我认为要解决这个问题,您应该将日历对象的TZ设置为UTC,然后它将匹配Web服务([Z]ulu==UTC)