我正在用java构建一个web服务,在基于org.apache.cxf的Jboss 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>apache cxf日志显示:
16:07:36,568 INFO [org.apache.cxf.interceptor.LoggingInInterceptor] ... Inbound Message
[...]
<birthday>1452-04-15</birthday>(这是正确的)
添加到请求bean的set方法中的自定义日志显示:
16:07:36,843 DEBUG com.xxx.xxx.service.request.UpdatePersonRequest ... called setBirthday with argument [06/04/52 0.00](这是错误的)
然后按以下方式对请求bean进行值化:
UpdatePersonRequest [... birthday=Thu Apr 06 00:00:00 CET 1452, ...](这是错误的)
所以我得到了1452年4月15日,而不是1452年4月15日。
我尝试了不同的日期,例如,soap:
<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 ...](又错了)
I获得4月21日而不是4月30日.
我尝试了几个日期,并注意到问题发生在1582年10月15日之前的日期。对于最近的日期,所有操作都很好,并且请求bean被正确地值化了。
是否有一些我没有考虑的java.util.Date限制?我是否应该使用另一个java来表示这种日期,然后呢?
非常感谢。
编辑
其结果是,我输入到soap请求中的日期是在Julian中转换的,然后我在数据库上的持久化日期将是这个转换日期。但是我想在DB上写我在请求中输入的确切日期,而不是更正的日期,换句话说,我希望调用者处理正确的日期系统,系统不会自动进行任何转换。
我怎样才能得到这个?
发布于 2014-04-23 20:09:22
你遇到了从朱利安到公历的转变。这是一个历史事件,而不是Java的一个特性。谷歌“公历”会告诉你更多。
https://stackoverflow.com/questions/23254168
复制相似问题