Postgresql日期类型和java SimpleDateFormat

时间:2014-04-04 16:54:18

标签: java hibernate postgresql date simpledateformat

我有一个类型为date的数据库列,其值为

2014-05-01

然后我有以下hibernate映射:

@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小时使日期回溯到时间前一天?

有没有办法阻止这种情况发生,我只想将它视为一个日期,没有时间组件!

1 个答案:

答案 0 :(得分:2)

您也应该指定时区(以及安全的英语语言环境):

<h:outputText value="#{someBean.endDate}">
    <f:convertDateTime pattern="d MMM yyyy" timeZone="GMT" locale="en" />
</h:outputText>

因此我假设输入是UTC时区(即文字日期最初是相对于UTC存储的),因此对输出格式使用相同的偏移量不会改变日期(以及&#34的中间输出) ; 5/1 / 2014&#34;只是由相同的偏移效果改变的默认美国格式。)

如果您使用其他时区转换存储了日期,则必须调整timeZone属性(例如&#34; Europe / London&#34;)。

更新:我发现这个SO-question也可以为您提供帮助。