Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Web服务-日期的更好选择-Java.util.date限制?_Java_Web Services_Date - Fatal编程技术网

Java Web服务-日期的更好选择-Java.util.date限制?

Java Web服务-日期的更好选择-Java.util.date限制?,java,web-services,date,Java,Web Services,Date,我正在用java构建一个web服务,基于org.apache.cxf在Jboss-as-7.1.1.Final下部署它 我需要公开一个web方法,该方法接受一个日期字段的输入,该字段在过去可以到达许多世纪。 目前我正在使用java.util.Date。 因此,我的web方法是 public UpdatePersonResponse updatePerson(UpdatePersonRequest request) { ... } 请求bean UpdatePersonRequest具有: ..

我正在用java构建一个web服务,基于org.apache.cxf在Jboss-as-7.1.1.Final下部署它

我需要公开一个web方法,该方法接受一个日期字段的输入,该字段在过去可以到达许多世纪。 目前我正在使用java.util.Date。 因此,我的web方法是

public UpdatePersonResponse updatePerson(UpdatePersonRequest request) {
...
}
请求bean UpdatePersonRequest具有:

...
private Date birthday;
...
在我正在测试的soap请求中,我将:

<!--Optional:-->
<birthday>1452-04-15</birthday>
(这是错误的)

然后,请求bean的值化如下所示:

UpdatePersonRequest [... birthday=Thu Apr 06 00:00:00 CET 1452, ...]
(这是错误的)

所以我得到的是2006年4月1452日,而不是4月15日的1452。

我试过不同的日期,比如, 肥皂:

(错)

这个bean是:

UpdatePersonRequest [... birthday=Fri Apr 21 00:00:00 CET 1452 ...]
(又错了)

我获得的是4月21日,而不是4月30日。

我尝试了几个日期,发现问题发生在1582年10月15日之前的日期。对于最近的日期,所有这些都可以正常工作,并且请求bean被正确地定值

是否存在我没有考虑的java.util.Date限制? 我应该使用另一种java类型来表示这些日期吗

多谢各位

编辑

其效果是,我在soap请求中输入的日期转换为Julian日期,然后我在数据库中保留的日期将是这个转换后的日期。 但我想在DB上写下我在请求中输入的确切日期,而不是更正的日期,换句话说,我希望调用者使用正确的日期系统,而不是进行任何转换​​由系统自动执行


我怎样才能做到这一点呢?

您正遇到从儒略到公历的转变。这是一个历史事件,不是Java的特性。谷歌搜索“公历”会告诉你更多信息。

非常感谢你的回答。我看到,在整个1452年中,朱利安日历和格里高利日历之间的差异是9天,这就是我在soap请求中插入的日期和调用请求bean的set方法的日期之间的确切差异。现在我还不明白ApacheCXF使用的逻辑是什么。它假设传入的请求包含一个以公历表示的日期,然后将其转换为朱利安日期?为什么?
UpdatePersonRequest [... birthday=Thu Apr 06 00:00:00 CET 1452, ...]
<birthday>1452-04-30</birthday>
21:11:51,607 DEBUG  [com.xxx.xxx.service.request.UpdatePersonRequest]  ... called setBirthday with argument [21/04/52 0.00]
UpdatePersonRequest [... birthday=Fri Apr 21 00:00:00 CET 1452 ...]