2012-06-15 4 views
1

В моей базе данных Postgresql у меня есть временная метка без часового пояса с этим значением: "2012-06-15 17:49:46.423" (тип данных по умолчанию, используемый Hibernate).Java - SimpleDateFormat неправильный формат

Если я формат с SimpleDateFormat и этот шаблон "EEEE dd MMMM yyyy", формат SimpleDateFormat # возвращает «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" 

Hibernate 3.6.8.Final
JSF 2,0
JBoss 5.1.0.GA
Java 6

Спасибо.

+4

Timezone машины, которая производит этот результат? –

+0

GMT +1 (сторона JBoss), GMT +0200 (Postgresql) – Stephan

+3

Также «jeudi» - «четверг», а не «вторник». –

ответ

1

После поиска выясняется, что у меня было два основных варианта. Либо я устанавливаю часовой пояс через Hibernate или JSF.

Вариант 1: Hibernate
Я мог бы изменить тип доступа к собственности. Поэтому в установщике я должен настроить значение временной метки в нужном часовом поясе. Другим решением будет создание пользовательского типа Hibernate.

Полная информация с кодом здесь: Mapping Dates and Time Zones with Hibernate, Part 2: Few Solutions

Вариант 2: JSF
Последний вариант, я либо создать custom converter в JSF или более просто, я использую 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> 

Все мои даты правильны сейчас

Источник (на французском языке): Comment utiliser le timezone du compensant JSF convertDateTime

0
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMMM yyyy zzzz G", Locale.FRENCH); 

попробовать это

также выводя дату автоматически распечатывает форматированный текст даты в машинное время зоны.

1

Это показывает вам всего на один день вперед, что вы ожидаете. Возможно, причиной может быть время сервера, которое, как я полагаю, находится в другом часовом поясе. В любом случае код ниже работает нормально:

SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd MMMM yyyy", Locale.FRENCH); 
System.out.println(sdf.format(new Date())); 
Смежные вопросы