1

在我的 Postgresql 数据库中,我有一个没有时区的时间戳,其值为:"2012-06-15 17:49:46.423"(Hibernate 使用的默认数据类型)。

如果我使用 SimpleDateFormat 和此模式进行"EEEE dd MMMM yyyy"格式化,SimpleDateFormat#format 将返回“jeudi 14 juin 2012”。

为什么结果不是“vendredi 15 juin 2012”?

非法语口语的法语到英语翻译:

"jeudi 14 juin 2012"    => "Thursday 14th of June 2012"
"vendredi 15 juin 2012" => "Friday 15th of June 2012"

休眠 3.6.8.Final
JSF 2.0
JBoss 5.1.0.GA
Java 6

谢谢。

4

3 回答 3

1

它向您展示的只是比您预期的要早一天。原因可能是服务器时间,我猜它在另一个时区。无论如何,下面的代码工作正常:

SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd MMMM yyyy", Locale.FRENCH);
System.out.println(sdf.format(new Date()));
于 2012-06-15T16:39:37.780 回答
1

搜索后,事实证明我有两个主要选择。我通过 Hibernate 或 JSF 设置时区。

选项 1:休眠
我可以将访问类型更改为属性。所以在设置器中,我会将时间戳值调整到正确的时区。另一种解决方案是创建自定义 Hibernate 用户类型。

此处包含代码的完整详细信息:使用 Hibernate 映射日期和时区,第 2 部分:很少有解决方案

选项 2:JSF
最后一个选项,我在 JSF 中创建一个custom converter或更简单的,我使用.timeZone属性f:convertDateTime

我是这样做的:

<h:outputText value="#{row.date}">
    <f:convertDateTime pattern="EEEE dd MMMM yyyy" locale="fr_FR" type="date" timeZone="Europe/Paris" />
</h:outputText>

我所有的日期现在都是正确的!

来源(法语):评论 utiliser le timezone du compensant JSF convertDateTime

于 2012-06-18T10:58:53.670 回答
0
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMMM yyyy zzzz G", Locale.FRENCH);

试试这个

打印日期也会自动打印机器时区的格式化日期文本。

于 2012-06-15T16:33:41.730 回答