我有一个日期类型的数据库列,具有以下值
2014-05-01
然后我有以下休眠映射:
@Temporal(TemporalType.DATE)
@Column(name = "end_date", nullable = false, length = 13)
public Date getEndDate() {
return this.endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
当我通过以下方式在 JSF 页面中引用此日期时
<h:outputText value="#{someBean.endDate}">
<f:convertDateTime pattern="d MMM yyyy" />
</h:outputText>
它读作
'30 Apr 2014'
所以我删除了 f:convertDateTime 它显示:
'5/1/2014'
所以我将 f:convertDateTime 更改为:
<h:outputText value="#{someBean.endDate}">
<f:convertDateTime pattern="HH:mm d MMM yyyy" />
</h:outputText>
上面写着:
'23:00 30 Apr 2014'
所以我的猜测是我的计算机设置为 BST(英国夏令时间)并且数据库中的日期以某种方式设置为 GMT(或祖鲁时间),以便 -1 小时导致日期及时移回前一天?
有什么办法可以阻止这种情况发生,我只想把它当作一个日期,没有时间成分!
您还应该指定时区(为了安全起见,还应该指定英语区域设置):
<h:outputText value="#{someBean.endDate}">
<f:convertDateTime pattern="d MMM yyyy" timeZone="GMT" locale="en" />
</h:outputText>
在此,我假设输入采用 UTC 时区(即文字日期最初是相对于 UTC 存储的),因此使用相同的输出格式偏移量不会更改日期(并且您的中间输出“5/1/2014 “只是默认的美国格式被相同的偏移效果改变)。
如果您使用其他时区转换存储日期,则必须调整时区属性(例如“欧洲/伦敦”)。
UPDATE: 这个我已经找到了SO问题这也应该对你有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)