Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Часы. Летнее\зимнее время. Как проверить правильно ли работают? (http://www.flasher.ru/forum/showthread.php?t=126262)

Art_133 15.06.2009 17:05

Часы. Летнее\зимнее время. Как проверить правильно ли работают?
 
Привет. Вроде сделал украинские часы с переходом на летнее время, но не могу понять как проверить их работоспособность.
Я учитываю погрешность относительно гринвича. Летом эта погрешность составляет +3, зимой +2. Учитываю летний период присваиваю значение переменной shift = 3, и зимой shift = 2.
На компьютерном календаре меняю месяц и число (проверяю реакцию на летний\зимний периоды) - трейситься нормально. Но вот на стрелках как было 15.00 (на пример) так и осталось. Подскажите что я не так делаю? Или когда комп сам перейдёт на зимнее время то всё будет ок?
Если нужен исходник - я выложу.
Вот сам код:

Код AS1/AS2:

// Обычное Украинское время (не летнее) относительно гринвича +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;


c'v 20.07.2009 01:44

Классный вопрос! Я над ним тоже голову ломаю. А вообще, было бы очень интересно, как написать код, который не на пару лет вперед, а на адцать лет вперед знал когда будет переход. Ведь если человеку можно сказать "последняя суббота такого-то месяца", то уж программе точно можно. Сколько не думал о таком if, ни к какому выводу не пришел...

В любом случае, мы же здесь явно не Америку открываем, наверняка этот вопрос десятки раз уже было освещен. Вот только где?.. Над запросом в google тоже приходится голову ломать… Help!

iNils 20.07.2009 13:43

На мой взгляд, вы оба ерундой страдаете.
Код AS1/AS2:

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

Видите у одной даты GMT+0400, а у другой GMT+0300? Это и есть показатель зимнего или летнего времени.
Узнается с помощью getTimezoneOffset().

Prior 02.04.2011 23:55

у меня задача посложнее
мне надо сделать часики для разных часовых поясов например москва, киев, нью-йорк, токио
вот как подскажите там действовать, если в москве например уже непереводят часы а в багдаде, тбилиси кажись переводят
как учитывать такое

dark256 03.04.2011 00:44

а никак. в юникс-дате нет такого параметра - "проверить включенность зимне-летнего времени в Багдаде" :)
getTimezoneOffset() - это тоже настройка из компа берется.

Сделайте собственную таблицу с параметрами-настройками городов и уже по ней сами выставляйте правильное время. А по getTimezoneOffset() вы лишь можете ЛОКАЛЬНЫЕ часы выставить на ноль, на гринвич. Все.


Часовой пояс GMT +4, время: 12:40.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.