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

Вообщем дано:
1) linux server на котором установлена Chile Local Time.
2) java application с quartz.

Когда я в linux вополняю команду date.

[root@prov01 deployment]# date
Thu Mar 22 12:58:23 CLST 2012

Так как сейчас летнее время в Чили, то система перевела время в CLST (Chile Local Summer Time, UTC-3), а когда будет зима переведет в CLT (Chile Local Time, UTC-4).

Дальше из java текущая дата:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
		
                System.out.println(new Date().toString());
		System.out.println(new Date().getTime());

		Calendar now = Calendar.getInstance(Locale.getDefault());
		System.out.println(now.getTime().toString());
		System.out.println(now.getTime().toLocaleString());

		TimeZone timeZone = now.getTimeZone();
		System.out.println(timeZone.getDisplayName());

		DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault());
		dateFormat.setTimeZone(TimeZone.getTimeZone("America/Santiago"));
		System.out.println(dateFormat.format(new Date()));

		System.out.println(TimeZone.getDefault().inDaylightTime(new Date())); 



Запускаю это на linux server:

Thu Mar 22 11:58:31 CLT 2012
1332431911021
Thu Mar 22 11:58:31 CLT 2012
Mar 22, 2012 11:58:31 AM
Chile Time
20120322115831
false

И вижу разницу в 1 час. Все ничего, но проблема у меня quartz и мне нужно выполнять задачи в определенное время с учётом зимнего и летнего времени (Time Zone configurations in SGP are set to use a single, local time zone for Chile, accounting for Daylight Savings Time (DST), if required, based on official time established by the Chilean authority).

Получается, что java не видит DST flag и возвращает мне время без учёта такой хитрой особености, что сейчас лето. При конфигурации quartz берет текущий Time Zone ("America/Santiago"), но опять же получается не видит этот DST flag, потому что использует всё тот же new Date().

Что делать? Почему new Date().toString() - не видит летнего сдвига времени, соотвественно и quartz выстреливает неправильно. Это одна проблема. Потом, мне нужно правильно писать date-ты в лог файл, в response-ы, но new Date() возвращает мне время без учётом перехода на летнее.

Как вообще бороться с таким?
...
Рейтинг: 0 / 0
Проблема с TimeZone, Date
    #37718878
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
начните с Timezone Updater Tool
...
Рейтинг: 0 / 0
Проблема с TimeZone, Date
    #37720784
_chaos_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov,

Netu tam esche poderzi Chile time.

Код: 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.
		final String CHILE_ZONEID = "America/Santiago";

		final int CHILE_UTC_OFFSET = -4; // hours
		final int CHILE_DST_OFFSET = +1; // daylight saving time hours
		final int CHILE_DTS_START_MONTH = Calendar.SEPTEMBER;
		final int CHILE_DTS_START_DAYOFWEEK = Calendar.SUNDAY;
		final int CHILE_DTS_START_DAY = -1; // last SUNDAY of SEPTEMBER
		final int CHILE_DTS_START_SWITCHINGMINUTE = 0; // 0=0:00am; 30=0:30am
														// 180=1:30am, ...
		final int CHILE_DTS_END_MONTH = Calendar.APRIL;
		final int CHILE_DTS_END_DAYOFWEEK = Calendar.SUNDAY;
		final int CHILE_DTS_END_DAY = 1; // first SUNDAY at or after APRIL 1st
		final int CHILE_DTS_END_SWITCHINGMINUTE = 0; // 0=0:00am; 30=0:30am
														// 180=1:30am, ...

		TimeZone individualChileTimeZone = new SimpleTimeZone(CHILE_UTC_OFFSET * 3600 * 1000, // int
																								// rawOffset
																								// in
																								// ms
				CHILE_ZONEID, // String ID
				CHILE_DTS_START_MONTH, // int startMonth
				CHILE_DTS_START_DAY, // int startDay
				CHILE_DTS_START_DAYOFWEEK, // int startDayOfWeek
				CHILE_DTS_START_SWITCHINGMINUTE * 60 * 1000, // int startTime in
																// ms
				CHILE_DTS_END_MONTH, // int endMonth
				CHILE_DTS_END_DAY, // int endDay
				CHILE_DTS_END_DAYOFWEEK, // int endDayOfWeek
				CHILE_DTS_END_SWITCHINGMINUTE * 60 * 1000, // int endTime in ms
				CHILE_DST_OFFSET * 3600 * 1000 // int dstSavings in ms
		);
		TimeZone.setDefault(individualChileTimeZone);
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с TimeZone, Date
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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