powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как работать с датами без таймзоны?
6 сообщений из 6, страница 1 из 1
Как работать с датами без таймзоны?
    #37734970
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Есть дата (date) в оракле. Есть дата (java.util.Date) в яве. В неё
хибернейт считывает дату из БД (пример- дата рождения).
Всё это передаётся на толстого клиента в рамках JavaEE6.

Там хранится именно дата, без времени. Надо её передать на клиента без
учёта таймзоны. Как это сделать? А то не смешно, когда вместо 2.04.2012
получаем 23:00:00 1.04.2012.
Сейчас преобразование происходит именно в момент передачи- т.е. метод
бина видит правильную дату, а на клиента приезжает "поправленная".

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как работать с датами без таймзоны?
    #37735014
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_Samara,

java.sql.Date ?
...
Рейтинг: 0 / 0
Как работать с датами без таймзоны?
    #37735101
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В joda-times есть LocalDate и есть binding для hibernate. Попробуйте их использовать.

У нас была похожая проблема, только в web-service. Решил ее путем установки UNDEFINED в приходящей дате (XMLGregorianCalendar).
...
Рейтинг: 0 / 0
Как работать с датами без таймзоны?
    #37735732
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, Michael Ponomarev!

> java.sql.Date ?

Он просто тупо уменьшается на день сразу.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как работать с датами без таймзоны?
    #37735884
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_Samara,

Детально уже не помню, проект давно закончен, работает есть не просит. Тонкий клиент.
Вкратце: даты в БД хранились по времени "москва-зима" (еще был не отменен перевод времени)
У юзера даты отображались в местном времени (например +2 часа -определялось в системе для юзера) и иногда по его пожеланию в серверном (москва-зима).

Вобщем поигравшись с выставлением нужного для тебя reportTimeZone мне кажется ты свою проблему решишь

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
    public class ReportUtils ....

    // временная зона пользователя, выполняющего отчет
    private TimeZone reportTimeZone = TimeZone.getDefault();

    ...

    public TimeZone getReportTimeZone() {
        return reportTimeZone;
    }

    /**
     * Получить дату в серверном времени с учетом временной зоны, 
     * установленной при выполнении отчета.
     * @param date дата.
     * @return
     */
    public Date getDateInServerTimeZone(Date date) {
        Calendar serverCalendar = Calendar.getInstance();
        serverCalendar.setTime(date);
        Calendar reportCalendar = Calendar.getInstance(getReportTimeZone());
        reportCalendar.set(serverCalendar.get(Calendar.YEAR), 
                           serverCalendar.get(Calendar.MONTH), 
                           serverCalendar.get(Calendar.DAY_OF_MONTH), 
                           serverCalendar.get(Calendar.HOUR_OF_DAY), 
                           serverCalendar.get(Calendar.MINUTE), 
                           serverCalendar.get(Calendar.SECOND));
        reportCalendar.set(Calendar.MILLISECOND, 0);
        return reportCalendar.getTime();
    }

    /**
     * Получить заданную дату во временной зоне отчета.
     * @param date дата.
     * @return
     */
    public Date getDateInReportTimeZone(Date date) {
        Calendar serverCalendar = Calendar.getInstance();
        Calendar reportCalendar = Calendar.getInstance(getReportTimeZone());
        reportCalendar.setTime(date);
        serverCalendar.set(reportCalendar.get(Calendar.YEAR), 
                           reportCalendar.get(Calendar.MONTH), 
                           reportCalendar.get(Calendar.DAY_OF_MONTH), 
                           reportCalendar.get(Calendar.HOUR_OF_DAY), 
                           reportCalendar.get(Calendar.MINUTE), 
                           reportCalendar.get(Calendar.SECOND));
        serverCalendar.set(Calendar.MILLISECOND, 0);
        return serverCalendar.getTime();
    }



может это и не совсем то, но направление, думаю верное :)

p.s. java.sql.Date ну совсем не надо, там кажись вообще чудяса
...
Рейтинг: 0 / 0
Как работать с датами без таймзоны?
    #37737702
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, Leonidv!

> В joda-times есть LocalDate
> < http://joda-time.sourceforge.net/api-release/org/joda/time/LocalDate.html>
> и есть binding для hibernate. Попробуйте их использовать.

Интересно. Только вот оно мне всё не надо. Попробовал сам сделать на
основе http://joda-time.sourceforge.net/contrib/hibernate/userguide.html
и исходников joda-time-hibernate-1.3-sources.jar

Написал маппинг Date на Long

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
package ru.infosfera.common.hibernate_mapping;
....
public class DateInLong implements EnhancedUserType, Serializable {
  @Override
  public int[] sqlTypes() {
    return new int[] { Types.DATE };
  }
  @Override
  public Class<?> returnedClass() {
    return Long.class;
  }
......



В persistence.xml пишу
Код: sql
1.
2.
3.
4.
5.
6.
7.
  <persistence-unit ...>
    <properties>
      <property name="dateTime"
type="ru.infosfera.common.hibernate_mapping.LocalDate"/>
      <property name="date"
type="ru.infosfera.common.hibernate_mapping.LocalDate"/>
    </properties>



в коде

@Column
@NotNull(message="Validation.NotNull")
@Type(type="ru.infosfera.common.hibernate_mapping.DateInLong")
private Long dateBegin;

При деплое получаю ошибку:

Caused by: org.xml.sax.SAXException: cvc-complex-type.3.2.2: Attribute
'type' is not allowed to appear in element 'property'. @
vfs:///D:/java/jboss/server/default/deploy/StartNg.twf-3.S2.0.ear/Common.auth.ejb-3.S2.0.jar/META-INF/persistence.xml[21,89]

Где я ошибся?


--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как работать с датами без таймзоны?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]