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

"Сами мы не местные". Необходимо учитывать при обмене с сервером пользовательские настройки временной зоны при чтении/записи java.util.Date с/на сервер. Сервер хранит UTC, пользователь оперирует временем своей временной зоны. Чтобы обеспечить обмен набросал код прямого и обратного конвертирования:

Код: 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.
	/**
	 * Convert user time zone date to utc 
	 * @param user time zone date
	 * @return utc date
	 */
	public Date toUTC(Date date) { 
		final TimeZone localTimeZone = getUserTimeZone();
		final Calendar utcTime = Calendar.getInstance();
		utcTime.setTimeInMillis(date.getTime());
		int utcOffset = localTimeZone.getOffset(date.getTime());
		utcTime.add(Calendar.MILLISECOND, -utcOffset);
		return utcTime.getTime();
	}
	
	/**
	 * Convert utc date to user time zone date
	 * @param utc date
	 * @return user time zone date
	 */
	public Date fromUTC(Date date) {
		final TimeZone localTimeZone = getUserTimeZone();
		final Calendar localeTime = Calendar.getInstance();
		localeTime.setTimeInMillis(date.getTime());
		int utcOffset = localTimeZone.getOffset(date.getTime());
		localeTime.add(Calendar.MILLISECOND, utcOffset);
		return localeTime.getTime();
	}



Видите ли вы потенциальные проблемы в этом коде или подобная наивная реализация должна выдержать переходы на летнее зимнее время и прочее-прочее?

Заранее спасибо!
...
Рейтинг: 0 / 0
Конвертировка в UTC и обратно
    #38560217
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не проще ли передавать Calendar в этом случае?
...
Рейтинг: 0 / 0
Конвертировка в UTC и обратно
    #38560223
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Библиотека доступа к данным заточена на java.util.Date, к сожалению. Переписывать ее пока не входит в мои планы.
...
Рейтинг: 0 / 0
Конвертировка в UTC и обратно
    #38560267
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стремно как-то оперировать Date в то время как часовой пояс имеет значение. Как минимум тогда стоит таскать TimeZone везде с собой. Иначе как определить из какого пояса Date, если вдруг он где-то просочиться необработанным?
Если в проекте уже используется Commons Langs, то можно взять методы изменения Date оттуда, а не писать самому.
Ну, и если включить code review зануду, то методы очевидный копипаст, отличающиеся одним символом. Я за такое всегда мысленно себя ругаю и тут же рефакторю.
...
Рейтинг: 0 / 0
Конвертировка в UTC и обратно
    #38560907
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Спасибо большое за ответ! Риски я понимаю, но пока должен остаться в поле java.utils.Date. А там глядишь и новое Date and Time API в JDK 8 подоспеет.
...
Рейтинг: 0 / 0
Конвертировка в UTC и обратно
    #38560909
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковСпасибо большое за ответ! Риски я понимаю, но пока должен остаться в поле java.utils.Date. А там глядишь и новое Date and Time API в JDK 8 подоспеет.
Дык они там Jode Time всосали в JSE. Причем не весь, а выборочно.
...
Рейтинг: 0 / 0
Конвертировка в UTC и обратно
    #38560951
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле вопрос некорректный. Зачем преобразовывать время? Оно едино для всех, и хранится как количество миллисекунд, прошедших с определенного момента (единого для всех).
У вас есть время, а каково его значение на клиенте - это вопрос представления, который решается с помощью календаря. Вы сейчас решаете задачу представления изменяя модель, и это неправильно. Методы toUTC и fromUTC должны преобразовывать Date<->Calendar, Date<->String
...
Рейтинг: 0 / 0
Конвертировка в UTC и обратно
    #38561163
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra,

Вы правы, но модель я как раз не трогаю. Исходный вопрос возник в силу того, что представление у меня date ориентированное и единственный способ ему "сказать" в каком часовом поясе он находится это искусственно сместить дату на величину смещения относительно UTC в процессе "отрисовки".
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Конвертировка в UTC и обратно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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