Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Проблмеи при работе с Date Object |
Автор: zenit 21.4.2010, 20:07 | ||||
Дорогие друзья, СОС! Хоть и пытался вработаться в тематику работы с датами, не могу врубиться, как и куда сажать часовое смесщение летнего времени. Код заключается в том, чтобы считать с клиента отдельные фрагменты даты: время, дата, временная зона(TimeZone). Из этих компонентов "леплю" обьект и помещаю его в базу данных.
Из базы данных считывается объект след.образом:
НО! У меня постоянно после того, как я считываю объект из базы данных смещение на 1 час! Дело, как мне кажется именно в getDSTSavings(). но вопрос, куда эго прибавлять/вычитать. Я всего лишь хочу записать и считать один и тот же обьект! Дело в том, что в последствии данхые отправляются обратно на клиент и там они должны быть в соответствии с начальными параметрами(время, дата, зона) снова "расчленены"...Следовательно я передаю ещё и клиенту информацию через getOffset(). Плиииз, подскажите, куда мне девать этот одсет изначально! |
Автор: dobrolub 22.4.2010, 05:55 |
А почему ты не используешь GregorianCalendar (Коляды Дар ![]() Тут нужно по крайней мере делать всё симметрично, и Calendar самый лучший способ для этого. И уж если у тебя date не всегда utcDate, то не надо её именовать utcDate. |
Автор: zenit 22.4.2010, 10:12 |
что касается имени, здесь ДА - нужно исправить...но разве симметричность календаря мне поможет? тем более, что форматор возвратит мне Дату, а не календарь. |
Автор: LSD 22.4.2010, 13:44 | ||
1. Внутри Date время всегда хранится в UTC. TimeZone появляется у Calendar, когда нам нужно получить компоненты даты. И изыски типа:
смысла не имеют. 2. Из п. 1 следует, что надо сделать все, чтобы изначально правильно парсить время. Раз уж временная зона у вас не фиксированна, то в СУБД дата должна хранится либо в UTC (тогда мы теряем изначальную временную зону), либо хранится в поле поддерживающем временную зону. Клиенту лучше всего передавать: время в Date/long и TimeZone. |
Автор: zenit 29.4.2010, 16:38 |
Можно тогда Вас попросить предложить вариант ПРАВИЛьНОГО парзинга, чтобы быть уверенным, что в ДБ записана дата в UTC. Дело в том, что стринги от клиента я получаю отдельно: Дата, Время, AM/PM. И вот время, которое я получаю - это соотвественно время в одной из временных зон, которую выбрал для себя пользователь(18:00 Europe/Berlin, например...). От клиента я получаю легитимное ID для временной зоны, поэтому могу найти искомый объект: Timezone.getTimezone(ID). Вот только вопрос, как же мне сказать при использовании форматтера(ведъ именно с его помощью я превращу String в Date), чтобы он использовал правильный Offset для времени. Ведь если сказать formatter.setTimezone(UTC), то это будет неверно, ведь дата которую я получил, соответсвует времени не в UTC, а в указанной временной зоне. То есть нужен будет Цалендар, чтобы получать значиения отдельных временных параметров(год, месяц, час...)??? |
Автор: LSD 4.5.2010, 13:14 | ||
|