Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Часы с учётом часовых поясов
Flash Zone Forum > Macromedia Flash > ActionScript
zakobrezki
Необходимо создать аналоговые часы на FLASH с учётом времени в разных часовых поясах. Сами часы делаются достаточно просто. Вот стандартный алгоритм расчёта перемещения стрелок по циферблату:

Код
// Читаем текущее системное время
time=new Date();

// Выуживаем часы, минуты, секунды
seconds = time.getSeconds();
minutes = time.getMinutes();
hours = time.getHours();

hours = hours + (minutes/60);

// Подсчитаем часы, минуты, секунды
seconds = seconds*6;
minutes = minutes*6;
hours = hours*30;

// Вращаем стрелки
sec._rotation=seconds;
min._rotation=minutes;
hour._rotation=hours;


Для того, чтобы получить время по гринвичу(UTC он же GMT). Кусок по выуживанию часов, минут, секунд изменится следующим образом:

Код
// Выуживаем часы, минуты, секунды по Гринвичу(GMT)
seconds = time.getUTCSeconds();
minutes = time.getUTCMinutes();
hours = time.getUTCHours();

Остаётся сообразить, как переделать этот кусок для разных часовых поясов, с учётом переходов на летнее/змнее время.
Подскажите пожалуйста? smile.gif
tiHo
ну учет перехода на зимнее/летнее время вообщето делается на компьютере автоматически насколько я знаю, а флеш какраз подравнивается под часы компьютера. уже одной пробемой меньше.

а чтобы на разные часовы пояса, так там же ясно объяснено, что есть +0 +1+2+3+4+5+6+7 итд и так же -1-2-3-4-5-6-7.. итд так вот и отнимай или прибавляй к переменной hours значение часового пояса.
zakobrezki
Цитата(tiHo @ 30.07.2008 - 03:15) *
отнимай или прибавляй к переменной hours значение часового пояса.

Так пока и сделал. За одним небольшим нюансом. Летнее время в РФ - GMT+4, зимнее - GMT+3. А в Нью йорке зимой GMT-5, летом GMT-4. (http://ru.wikipedia.org/wiki/Нью_йорк)
В этом вся и загвоздка. smile.gif
AlexYeCu
Для чего делаются часы? Если для сайта, то выбранный вариант решения не годится. На сайте — только опрос серверных скриптов. Потому что:
- часы на машине-клиенте могут быть неправильно настроены
- разные операционные системы имеют разное представление о том, что есть системное время: ms windows системы уверены, что это местное время, все остальные, что Гринвич (к которому ещё надо прибавить время в зависимости от того, какой пояс выставлен). Соответственно потенциальные грабли.
Так что серверную часть часиков на php (к примеру), клиентскую на флэш. Как вариант — взять время при старте флэшки от сервера, внести поправку с временем машины и дальше так отсчитывать. Экстремальные варианты вроде просевшей батарейки можно не учитывать, если это конечно не какие-нибудь важные часы для сайта биржи или спортивного тотализатора.
chingachgoog
Цитата(zakobrezki @ 30.07.2008 - 02:28) *
Так пока и сделал. За одним небольшим нюансом. Летнее время в РФ - GMT+4, зимнее - GMT+3. А в Нью йорке зимой GMT-5, летом GMT-4.
В этом вся и загвоздка. smile.gif


А что тут смущает? Смысл летнего времени - часы на час вперед:
+3 (москва зимнее) +1 (на летнее) = +4
-5 (яблоко зимнее) +1 (на летнее) = -4

Засада в другом. В каждой местности может быть свой собственный график перехода на летнее/зимнее время или даже вообще такого перехода не существовать (без запудривания мозгов людям). Потому "универсальную формулу" на флеше не сделаешь. Надо делать расчет-проверку для конкретной местности. (ситуация когда пользователь отключил на своем компе переход на летнее время и т.п. вообще не рашаемая - у него изначально будет GMT неверно). Например для Москвы и Яблока график перехода различен. В москве летнее время начинается в субботу перед последним воскресеньем марта, а в Яблоке - второе воскресенье марта.

NB!
Местное время - это вообще произвол местных властей. Кто как хочет, тот так и устанавливает.
Например, московский часовой пояс +2 часа от Гринвича. +1 час добавляет декретное время большевиков (вот и получается зимой +3 часа). И еще +1 час накидывают летом (+4 часа летом).
Русская версия IP.Board © 2001-2011 IPS, Inc.