ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Элементарная задачка для программиста

Раздел для разработчиков для обсуждения программных и аппаратных продуктов и их реализации.

Модераторы: april22, Zavr2008

Re: Элементарная задачка для программиста

Сообщение tma » 07 ноя 2011, 10:49

ddkprog писал(а):случаи парсинга case 'Z': и case 'z':


О, хорошая ссылка. Linux не поддерживает.
Хотя в имеющемся исходнике от NetBSD данная опция так же неподдерживается!
Код: выделить все
                /* Operations with locale and time zones not supported. */
                case 'Z':       /* Time-zone-related. */
                case 'z':

Правда мой датирован 2008,а этот - 2009.

ddkprog писал(а):ни в одном нет такого понятия как MSK, это надуманый формат зоны и не стандартный


MSK это стандартное название. Вот ссылка,кстати данные по ней устарели -- они не знаю про медведевский указ. :lol:

ddkprog писал(а):поэтому пороще масивчик для соответсвия составить что MSK это Europe/Moscow итд

Крупный массивчик получается. ;(
Да и сам список сформировать как-то нужно.
SkyTel OU - облачная АТС, DID, SIP-транк с посекундной тарификаицей, мобильная связь
http://skytel24.com | Эстония: +372.333.55.10 | Россия: +7(495)4019900
tma
 
Сообщений: 1809
Зарегистрирован: 18 сен 2010, 20:50

Re: Элементарная задачка для программиста

Сообщение tma » 07 ноя 2011, 17:18

Europe/Moscow тоже в стандарте нет, а его понимает tzset в переменной TZ, т.к. туда можно вносить путь (в том числе относительный) к zoneinfo.
zoneinfo так же не содержит никаких MSK/MSD (файлы zone.tab и iso3166.tab).
Парсить все бинарные файлы зон не будешь -- для этого придется сканировать каталог в поисках нужного файла, затем его загружать и искать там аббревиатуру.
Есть вариант написать свой парсер исходной базы tzdata2011h.tar.gz (и т.д.), но смысл, когда она уже есть в zoneinfo?

Кстати, что-то не могу сообразить. +0300 это плюс к UTC или минус? Мозги вообще уже не варят...
SkyTel OU - облачная АТС, DID, SIP-транк с посекундной тарификаицей, мобильная связь
http://skytel24.com | Эстония: +372.333.55.10 | Россия: +7(495)4019900
tma
 
Сообщений: 1809
Зарегистрирован: 18 сен 2010, 20:50

Re: Элементарная задачка для программиста

Сообщение tma » 07 ноя 2011, 17:50

Linux'овый date как-то работает:
Код: выделить все
$ env TZ=UTC date -d "17:35:17.454 MSK Mon Nov 7 2011" +"%s %c"
1320676517 Пнд 07 Ноя 2011 14:35:17

Полез в исходники пакета coreutils...
SkyTel OU - облачная АТС, DID, SIP-транк с посекундной тарификаицей, мобильная связь
http://skytel24.com | Эстония: +372.333.55.10 | Россия: +7(495)4019900
tma
 
Сообщений: 1809
Зарегистрирован: 18 сен 2010, 20:50

Re: Элементарная задачка для программиста

Сообщение tma » 07 ноя 2011, 19:59

Блин, оказывается в date жестко забиты все таймзоны!
Код: выделить все
static table const time_zone_table[] =
{
  ...
  { "MSK",      tZONE,     HOUR ( 3) }, /* Moscow */
  { "MSD",      tDAYZONE,  HOUR ( 3) }, /* Moscow Daylight */
  ...
  { NULL, 0, 0 }
};

Выходит при изменении московского часового пояса, нужно так же проапгрейдить и данные утилиты... Дамс.
SkyTel OU - облачная АТС, DID, SIP-транк с посекундной тарификаицей, мобильная связь
http://skytel24.com | Эстония: +372.333.55.10 | Россия: +7(495)4019900
tma
 
Сообщений: 1809
Зарегистрирован: 18 сен 2010, 20:50

Re: Элементарная задачка для программиста

Сообщение ded » 07 ноя 2011, 20:05

Блин, таки оказалос, что не елементарная задачка?
ded
 
Сообщений: 15818
Зарегистрирован: 26 авг 2010, 19:00

Re: Элементарная задачка для программиста

Сообщение tma » 07 ноя 2011, 20:27

ddkprog писал(а):и одного файла соотвествий нет, есть кучу файлов разных зон где есть ети абревеатуры

Есть в текстовом формате - типа tzdata2011h.tar.gz.
Пример:
Код: выделить все
Zone Europe/Moscow       2:30:20 -      LMT     1880
                         2:30   -       MMT     1916 Jul  3 # Moscow Mean Time
                         2:30:48 Russia %s      1919 Jul  1 2:00
                         3:00   Russia  MSK/MSD 1922 Oct
                         2:00   -       EET     1930 Jun 21
                         3:00   Russia  MSK/MSD 1991 Mar 31 2:00s
                         2:00   Russia  EE%sT   1992 Jan 19 2:00s
                         3:00   Russia  MSK/MSD 2011 Mar 27 2:00s
                         4:00   -       MSK


ddkprog писал(а):поэтому универсальное - парсить каталог на наличие всех файлов зон

У меня пока мысль стандартным парсером попробовать сформировать один большой файл таймзоны по всему миру,
а затем скормить его библиотечной функции tzfile.

ddkprog писал(а):но колупатся во всех glib и прочих мне лень) у tma еще все впереди

Да, блин. Голова уже кипит. :oops:

ddkprog писал(а):а вообще проще устанавливать строгость в тайм выводах
и выводить тайм зон только в iso стандартах, GMT+3 или +3.00
другие выводы уже не стандарт

Сейчас я позвоню в Cisco и скажу, чтобы время выводили только в UTC. Кто даст номер телефона? :lol:
Кстати GMT давным давно не используется, а используется именно UTC.
SkyTel OU - облачная АТС, DID, SIP-транк с посекундной тарификаицей, мобильная связь
http://skytel24.com | Эстония: +372.333.55.10 | Россия: +7(495)4019900
tma
 
Сообщений: 1809
Зарегистрирован: 18 сен 2010, 20:50

Re: Элементарная задачка для программиста

Сообщение tma » 07 ноя 2011, 20:28

ded писал(а):что не елементарная задачка?

Да куда там. Кто в лес кто по дрова...
SkyTel OU - облачная АТС, DID, SIP-транк с посекундной тарификаицей, мобильная связь
http://skytel24.com | Эстония: +372.333.55.10 | Россия: +7(495)4019900
tma
 
Сообщений: 1809
Зарегистрирован: 18 сен 2010, 20:50

Re: Элементарная задачка для программиста

Сообщение ded » 07 ноя 2011, 20:51

tma писал(а):Сейчас я позвоню в Cisco и скажу, чтобы время выводили только в UTC. Кто даст номер телефона? :lol:

80020935011 (обрати внимание - международный 800-й, а не российский! То есть из России звонить как по межгороду, 8-10-80020935011
Контакт: Юлия Лубенская
ded
 
Сообщений: 15818
Зарегистрирован: 26 авг 2010, 19:00

Re: Элементарная задачка для программиста

Сообщение tma » 07 ноя 2011, 20:54

Вытащить из zoneinfo все соответствия таймзон и аббревиатур можно так:
Код: выделить все
$ for zi in `find /usr/share/zoneinfo`; do zdump $zi | sed -e 's|/usr/share/zoneinfo/||g' | awk '{print $1 " " $7}'; done | uniq | grep MSK
localtime MSK
W-SU MSK
right/W-SU MSK
right/Europe/Moscow MSK
posix/W-SU MSK
posix/Europe/Moscow MSK
Europe/Moscow MSK

Осталось отфильтровать ненужные.
Думаю можно и на awk сразу написать такое, но я его плохо знаю для этого...
SkyTel OU - облачная АТС, DID, SIP-транк с посекундной тарификаицей, мобильная связь
http://skytel24.com | Эстония: +372.333.55.10 | Россия: +7(495)4019900
tma
 
Сообщений: 1809
Зарегистрирован: 18 сен 2010, 20:50

Re: Элементарная задачка для программиста

Сообщение gosha » 07 ноя 2011, 22:54

эхх, не понять 'чудакам' пушущим на языках на букву 'P', 'реальных патцанов' на C...

gosha@g-laptop:/tmp$ cat /tmp/2 | perl -e 'use Date::Parse; print scalar(localtime(str2time($_))),"\n" while <>'
Wed Dec 9 21:27:28 1998
Sat Nov 5 22:04:33 2011
Sat Nov 5 22:04:33 2011

gosha@g-laptop:/tmp$ cat /tmp/2
18:27:28.032 UTC Wed Dec 9 1998
21:04:33.433 MSK Sat Nov 05 2011
21:04:33.433 +0300 Sat Nov 05 2011
gosha
 
Сообщений: 370
Зарегистрирован: 06 сен 2010, 17:41

Пред.След.

Вернуться в Разработка

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH