AXForum  
Вернуться   AXForum > Блоги > Владимир Максимов
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

Оценить эту запись

TimeZone в Ax2009

Запись от Владимир Максимов размещена 29.09.2014 в 16:01
Теги ax2009, timezone

Редкий случай, когда задачу на модификацию в Axapta поставили ДО вступления в силу очередного постановления правительства. Обычно задачу ставят спустя пол-года..год ПОСЛЕ . В данном случае, постановление о переводе часов на один час назад 26.10.2014 в 2 часа ночи. Ну, поскольку "ждать милостей от ..." не приходится, то решил разобраться самостоятельно

Импорт новых правил определения часовых поясов - это форма TimezonePatchImport. В ней выбирается файл XML, который формирует новую запись в таблице \System Documentation\Tables\TimeZonesRulesData.

Ага. И как должен выглядеть этот файл для новых правил? Ну, для начала надо понять назначение полей таблицы TimeZonesRulesData. Как оказалось, это не такая очевидная вещь Единственная ссылка, которую нашел

http://stackoverflow.com/questions/1...ersion/1293263

По этой ссылке (и после ряда экспериментов ) разобрался в назначении полей

----------------------------------------------------------

Назначение полей таблицы \System Documentation\Tables\TimeZonesRulesData

RULEID - идентификатор записи. Фассетный код: первые 2 символа - значение поля TZENUM, далее 3 символа - порядковый номер
TZENUM: Внешний ключ ссылки на таблицу TIMEZONESLIST или значение Base Enum: \System Documentation\Enums\Timezone
YEAR: 0 если правило действует бессрочно или год применения правила
BIAS: сдвиг времени в минутах относительно времени UTC
DBIAS: периодический сдвиг DST (добавляется к BIAS для установки общего сдвига от UTC)

Поля D* - определят начальную дату и время для сдвига DST
Поле S* - определят конечную дату и время для сдвига DST

Смысл полей ясен из их имени, кроме полей *DAY

DDAY и SDAY - это номер недели в месяце (1-4, 5 = последняя неделя)

DDAYOFWEEK и SDAYOFWEEK - номер дня недели (0 = Воскресенье)

Необходимо либо задавать диапазон (как начальные, так и конечные даты), либо не задавать диапазон вообще.
Указать только начальную или только конечную дату - невозможно. Это будет расценено как отсутствие диапазона. Т.е. действует на весь год

----------------------------------------------------------

Вот по какой логике в поле с названием DAY записывается номер недели в месяце? "Загадочная датская душа", не иначе Или уже американская

Кстати, и файл XML за 2010..2011 года тоже "чудо чудное". Начало диапазона тогда задали в октябре, а окончание в мае. Ну, вероятно, спиной к монитору программировали

----------------------------------------------------------

Ну, тогда новый файл XML получается таким

PHP код:
<?xml version="1.0" encoding="UTF-8"?>
<Timezoneslist>
    <!-- Russian Standard Time new rules -->
    <Timezonedata>
        <Timezonerule>
            <ruleid>61004</ruleid>
            <tzenum>61</tzenum>
            <year>2014</year>
            <bias>-240</bias>
            <syear>0</syear>
            <smonth>10</smonth>
            <sdayofweek>0</sdayofweek>
            <sday>5</sday>
            <shour>2</shour>
            <sminute>0</sminute>
            <ssecond>0</ssecond>
            <sbias>60</sbias>
            <dyear>0</dyear>
            <dmonth>12</dmonth>
            <ddayofweek>3</ddayofweek>
            <dday>5</dday>
            <dhour>23</dhour>
            <dminute>59</dminute>
            <dsecond>59</dsecond>
            <dbias>0</dbias>
        </Timezonerule>

        <Timezonerule>
            <ruleid>61005</ruleid>
            <tzenum>61</tzenum>
            <year>2015</year>
            <bias>-180</bias>
            <syear>0</syear>
            <smonth>0</smonth>
            <sdayofweek>0</sdayofweek>
            <sday>0</sday>
            <shour>0</shour>
            <sminute>0</sminute>
            <ssecond>0</ssecond>
            <sbias>0</sbias>
            <dyear>0</dyear>
            <dmonth>0</dmonth>
            <ddayofweek>0</ddayofweek>
            <dday>0</dday>
            <dhour>0</dhour>
            <dminute>0</dminute>
            <dsecond>0</dsecond>
            <dbias>0</dbias>
        </Timezonerule>
    </Timezonedata>
</Timezoneslist>
В принципе, можно сделать и одну запись, поставив в качестве даты окончания 2153 год. Но надо учитывать, что наше родное правительство в любой момент может выпустить очередное постановление о "самом правильном" распределении часовых поясов. О здоровье граждан они уже побеспокоились, следующее постановление замотивируют экономическим соображениями
Размещено в Без категории
Просмотров 48034 Комментарии 2
Всего комментариев 2

Комментарии

  1. Старый комментарий
    Применил описанный подход.
    Получился такой файлик
    Цитата:
    <?xml version="1.0" encoding="utf-8" ?>
    <Timezoneslist>
    <!-- Russian Standard Time new rules -->
    <Timezonedata>
    <Timezonerule>
    <ruleid>61004</ruleid>
    <tzenum>61</tzenum>
    <year>2014</year>
    <bias>-240</bias>
    <syear>0</syear>
    <smonth>10</smonth>
    <sdayofweek>0</sdayofweek>
    <sday>5</sday>
    <shour>2</shour>
    <sminute>0</sminute>
    <ssecond>0</ssecond>
    <sbias>60</sbias>
    <dyear>0</dyear>
    <dmonth>12</dmonth>
    <ddayofweek>3</ddayofweek>
    <dday>5</dday>
    <dhour>23</dhour>
    <dminute>59</dminute>
    <dsecond>59</dsecond>
    <dbias>0</dbias>
    </Timezonerule>
    <Timezonerule>
    <ruleid>61005</ruleid>
    <tzenum>61</tzenum>
    <year>2015</year>
    <bias>-180</bias>
    <syear>0</syear>
    <smonth>0</smonth>
    <sdayofweek>0</sdayofweek>
    <sday>0</sday>
    <shour>0</shour>
    <sminute>0</sminute>
    <ssecond>0</ssecond>
    <sbias>0</sbias>
    <dyear>0</dyear>
    <dmonth>0</dmonth>
    <ddayofweek>0</ddayofweek>
    <dday>0</dday>
    <dhour>0</dhour>
    <dminute>0</dminute>
    <dsecond>0</dsecond>
    <dbias>0</dbias>
    </Timezonerule>
    </Timezonedata>
    <!-- Ekaterinburg Standard Time new rules -->
    <Timezonedata>
    <Timezonerule>
    <ruleid>31004</ruleid>
    <tzenum>31</tzenum>
    <year>2014</year>
    <bias>-360</bias>
    <syear>0</syear>
    <smonth>10</smonth>
    <sdayofweek>0</sdayofweek>
    <sday>5</sday>
    <shour>2</shour>
    <sminute>0</sminute>
    <ssecond>0</ssecond>
    <sbias>60</sbias>
    <dyear>0</dyear>
    <dmonth>12</dmonth>
    <ddayofweek>3</ddayofweek>
    <dday>5</dday>
    <dhour>23</dhour>
    <dminute>59</dminute>
    <dsecond>59</dsecond>
    <dbias>0</dbias>
    </Timezonerule>
    <Timezonerule>
    <ruleid>31005</ruleid>
    <tzenum>31</tzenum>
    <year>2015</year>
    <bias>-300</bias>
    <syear>0</syear>
    <smonth>0</smonth>
    <sdayofweek>0</sdayofweek>
    <sday>0</sday>
    <shour>0</shour>
    <sminute>0</sminute>
    <ssecond>0</ssecond>
    <sbias>0</sbias>
    <dyear>0</dyear>
    <dmonth>0</dmonth>
    <ddayofweek>0</ddayofweek>
    <dday>0</dday>
    <dhour>0</dhour>
    <dminute>0</dminute>
    <dsecond>0</dsecond>
    <dbias>0</dbias>
    </Timezonerule>
    </Timezonedata>
    <!-- N. Central Asia Standard Time new rules -->
    <Timezonedata>
    <Timezonerule>
    <ruleid>50004</ruleid>
    <tzenum>50</tzenum>
    <year>2014</year>
    <bias>-420</bias>
    <syear>0</syear>
    <smonth>10</smonth>
    <sdayofweek>0</sdayofweek>
    <sday>5</sday>
    <shour>2</shour>
    <sminute>0</sminute>
    <ssecond>0</ssecond>
    <sbias>60</sbias>
    <dyear>0</dyear>
    <dmonth>12</dmonth>
    <ddayofweek>3</ddayofweek>
    <dday>5</dday>
    <dhour>23</dhour>
    <dminute>59</dminute>
    <dsecond>59</dsecond>
    <dbias>0</dbias>
    </Timezonerule>
    <Timezonerule>
    <ruleid>50005</ruleid>
    <tzenum>50</tzenum>
    <year>2015</year>
    <bias>-360</bias>
    <syear>0</syear>
    <smonth>0</smonth>
    <sdayofweek>0</sdayofweek>
    <sday>0</sday>
    <shour>0</shour>
    <sminute>0</sminute>
    <ssecond>0</ssecond>
    <sbias>0</sbias>
    <dyear>0</dyear>
    <dmonth>0</dmonth>
    <ddayofweek>0</ddayofweek>
    <dday>0</dday>
    <dhour>0</dhour>
    <dminute>0</dminute>
    <dsecond>0</dsecond>
    <dbias>0</dbias>
    </Timezonerule>
    </Timezonedata>
    <!-- North Asia Standard Time new rules -->
    <Timezonedata>
    <Timezonerule>
    <ruleid>56004</ruleid>
    <tzenum>56</tzenum>
    <year>2014</year>
    <bias>-480</bias>
    <syear>0</syear>
    <smonth>10</smonth>
    <sdayofweek>0</sdayofweek>
    <sday>5</sday>
    <shour>2</shour>
    <sminute>0</sminute>
    <ssecond>0</ssecond>
    <sbias>60</sbias>
    <dyear>0</dyear>
    <dmonth>12</dmonth>
    <ddayofweek>3</ddayofweek>
    <dday>5</dday>
    <dhour>23</dhour>
    <dminute>59</dminute>
    <dsecond>59</dsecond>
    <dbias>0</dbias>
    </Timezonerule>
    <Timezonerule>
    <ruleid>56005</ruleid>
    <tzenum>56</tzenum>
    <year>2015</year>
    <bias>-420</bias>
    <syear>0</syear>
    <smonth>0</smonth>
    <sdayofweek>0</sdayofweek>
    <sday>0</sday>
    <shour>0</shour>
    <sminute>0</sminute>
    <ssecond>0</ssecond>
    <sbias>0</sbias>
    <dyear>0</dyear>
    <dmonth>0</dmonth>
    <ddayofweek>0</ddayofweek>
    <dday>0</dday>
    <dhour>0</dhour>
    <dminute>0</dminute>
    <dsecond>0</dsecond>
    <dbias>0</dbias>
    </Timezonerule>
    </Timezonedata>
    <!-- North Asia East Standard Time new rules -->
    <Timezonedata>
    <Timezonerule>
    <ruleid>55004</ruleid>
    <tzenum>55</tzenum>
    <year>2014</year>
    <bias>-540</bias>
    <syear>0</syear>
    <smonth>10</smonth>
    <sdayofweek>0</sdayofweek>
    <sday>5</sday>
    <shour>2</shour>
    <sminute>0</sminute>
    <ssecond>0</ssecond>
    <sbias>60</sbias>
    <dyear>0</dyear>
    <dmonth>12</dmonth>
    <ddayofweek>3</ddayofweek>
    <dday>5</dday>
    <dhour>23</dhour>
    <dminute>59</dminute>
    <dsecond>59</dsecond>
    <dbias>0</dbias>
    </Timezonerule>
    <Timezonerule>
    <ruleid>55005</ruleid>
    <tzenum>55</tzenum>
    <year>2015</year>
    <bias>-480</bias>
    <syear>0</syear>
    <smonth>0</smonth>
    <sdayofweek>0</sdayofweek>
    <sday>0</sday>
    <shour>0</shour>
    <sminute>0</sminute>
    <ssecond>0</ssecond>
    <sbias>0</sbias>
    <dyear>0</dyear>
    <dmonth>0</dmonth>
    <ddayofweek>0</ddayofweek>
    <dday>0</dday>
    <dhour>0</dhour>
    <dminute>0</dminute>
    <dsecond>0</dsecond>
    <dbias>0</dbias>
    </Timezonerule>
    </Timezonedata>
    <!-- Yakutsk Standard Time new rules -->
    <Timezonedata>
    <Timezonerule>
    <ruleid>82004</ruleid>
    <tzenum>82</tzenum>
    <year>2014</year>
    <bias>-600</bias>
    <syear>0</syear>
    <smonth>10</smonth>
    <sdayofweek>0</sdayofweek>
    <sday>5</sday>
    <shour>2</shour>
    <sminute>0</sminute>
    <ssecond>0</ssecond>
    <sbias>60</sbias>
    <dyear>0</dyear>
    <dmonth>12</dmonth>
    <ddayofweek>3</ddayofweek>
    <dday>5</dday>
    <dhour>23</dhour>
    <dminute>59</dminute>
    <dsecond>59</dsecond>
    <dbias>0</dbias>
    </Timezonerule>
    <Timezonerule>
    <ruleid>82005</ruleid>
    <tzenum>82</tzenum>
    <year>2015</year>
    <bias>-540</bias>
    <syear>0</syear>
    <smonth>0</smonth>
    <sdayofweek>0</sdayofweek>
    <sday>0</sday>
    <shour>0</shour>
    <sminute>0</sminute>
    <ssecond>0</ssecond>
    <sbias>0</sbias>
    <dyear>0</dyear>
    <dmonth>0</dmonth>
    <ddayofweek>0</ddayofweek>
    <dday>0</dday>
    <dhour>0</dhour>
    <dminute>0</dminute>
    <dsecond>0</dsecond>
    <dbias>0</dbias>
    </Timezonerule>
    </Timezonedata>
    <!-- Vladivostok Standard Time new rules -->
    <Timezonedata>
    <Timezonerule>
    <ruleid>76004</ruleid>
    <tzenum>76</tzenum>
    <year>2014</year>
    <bias>-660</bias>
    <syear>0</syear>
    <smonth>10</smonth>
    <sdayofweek>0</sdayofweek>
    <sday>5</sday>
    <shour>2</shour>
    <sminute>0</sminute>
    <ssecond>0</ssecond>
    <sbias>60</sbias>
    <dyear>0</dyear>
    <dmonth>12</dmonth>
    <ddayofweek>3</ddayofweek>
    <dday>5</dday>
    <dhour>23</dhour>
    <dminute>59</dminute>
    <dsecond>59</dsecond>
    <dbias>0</dbias>
    </Timezonerule>
    <Timezonerule>
    <ruleid>76005</ruleid>
    <tzenum>76</tzenum>
    <year>2015</year>
    <bias>-600</bias>
    <syear>0</syear>
    <smonth>0</smonth>
    <sdayofweek>0</sdayofweek>
    <sday>0</sday>
    <shour>0</shour>
    <sminute>0</sminute>
    <ssecond>0</ssecond>
    <sbias>0</sbias>
    <dyear>0</dyear>
    <dmonth>0</dmonth>
    <ddayofweek>0</ddayofweek>
    <dday>0</dday>
    <dhour>0</dhour>
    <dminute>0</dminute>
    <dsecond>0</dsecond>
    <dbias>0</dbias>
    </Timezonerule>
    </Timezonedata>
    </Timezoneslist>
    Запись от Logger размещена 20.10.2014 в 21:56 Logger is offline
  2. Старый комментарий
    Цитата:
    BIAS: сдвиг времени в минутах относительно времени UTC
    DBIAS: периодический сдвиг DST (добавляется к BIAS для установки общего сдвига от UTC)
    Владимир, а что означает поле SBIAS?
    Запись от MShi размещена 07.11.2014 в 11:42 MShi is offline
 


Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:10.