![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Привет. Вроде сделал украинские часы с переходом на летнее время, но не могу понять как проверить их работоспособность.
Я учитываю погрешность относительно гринвича. Летом эта погрешность составляет +3, зимой +2. Учитываю летний период присваиваю значение переменной shift = 3, и зимой shift = 2. На компьютерном календаре меняю месяц и число (проверяю реакцию на летний\зимний периоды) - трейситься нормально. Но вот на стрелках как было 15.00 (на пример) так и осталось. Подскажите что я не так делаю? Или когда комп сам перейдёт на зимнее время то всё будет ок? Если нужен исходник - я выложу. Вот сам код: // Обычное Украинское время (не летнее) относительно гринвича +2, летнее +3 // Погрешность относительно гринвича var shift:Number; //Экземпляр класса Date var today:Date = new Date(); // Текущий месяц (добавляем 1 т.к. первый месяц года начинается с ноля) var month:Number = today.getMonth() + 1; // День var day:Number = today.getDate(); // Год var year:Number = today.getFullYear(); // Определяем год, т.к. летнее время начинается\заканчивается в разные числа разного года switch (year) { case 2009 : // В 2009-м году летнее время с 29 марта по 25 октября // Определяем летнее время сейчас или зимнее if (summerTime(29, 3, 25, 10)) { shift = 3; } else { shift = 2; } trace('2009'); break; case 2010 : // В 2010-м году летее время с 28 марта по 31 октября // Определяем летнее время сейчас или зимнее if (summerTime(28, 3, 31, 10)) { shift = 3; } else { shift = 2; } trace('2010'); break; default : trace('default'); } // Определяем летнее время сейчас или зимнее // sDay, sMon - день и месяц начала летнего времени // fDay, fMon - день и мецяс окончания летнего времени function summerTime(sDay:Number, sMon:Number, fDay:Number, fMon:Number):Boolean { if (month < sMon || month > fMon) { return false; } if ((month == sMon && day < sDay) || (month == fMon && day > fDay)) { return false; } return true; } ///////////////////////////////////Крутим стрелки////////////////////////////////////////////// s._rotation = today.getSeconds() * 6; m._rotation = today.getMinutes() * 6; h._rotation = (today.getUTCHours() + shift) * 30 + today.getMinutes() / 2; Последний раз редактировалось Art_133; 16.06.2009 в 20:25. |
|
|||||
|
Guest
Сообщений: n/a
|
Классный вопрос! Я над ним тоже голову ломаю. А вообще, было бы очень интересно, как написать код, который не на пару лет вперед, а на адцать лет вперед знал когда будет переход. Ведь если человеку можно сказать "последняя суббота такого-то месяца", то уж программе точно можно. Сколько не думал о таком if, ни к какому выводу не пришел...
В любом случае, мы же здесь явно не Америку открываем, наверняка этот вопрос десятки раз уже было освещен. Вот только где?.. Над запросом в google тоже приходится голову ломать… Help! |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
На мой взгляд, вы оба ерундой страдаете.
trace (new Date (2009, 9, 25, 1));//Sun Oct 25 01:00:00 GMT+0400 2009 trace (new Date (2009, 9, 25, 2));//Sun Oct 25 02:00:00 GMT+0300 2009 Узнается с помощью getTimezoneOffset(). |
|
|||||
|
Регистрация: Aug 2009
Сообщений: 74
|
у меня задача посложнее
мне надо сделать часики для разных часовых поясов например москва, киев, нью-йорк, токио вот как подскажите там действовать, если в москве например уже непереводят часы а в багдаде, тбилиси кажись переводят как учитывать такое |
|
|||||
|
а никак. в юникс-дате нет такого параметра - "проверить включенность зимне-летнего времени в Багдаде"
![]() getTimezoneOffset() - это тоже настройка из компа берется. Сделайте собственную таблицу с параметрами-настройками городов и уже по ней сами выставляйте правильное время. А по getTimezoneOffset() вы лишь можете ЛОКАЛЬНЫЕ часы выставить на ноль, на гринвич. Все. |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:33. |
|
|
« Предыдущая тема | Следующая тема » |
|
|