Java Web服务-日期的更好选择-Java.util.date限制?
我正在用java构建一个web服务,基于org.apache.cxf在Jboss-as-7.1.1.Final下部署它 我需要公开一个web方法,该方法接受一个日期字段的输入,该字段在过去可以到达许多世纪。 目前我正在使用java.util.Date。 因此,我的web方法是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具有: ..
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 ...]