VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

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

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

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

tma
Сообщения: 1809
Зарегистрирован: 18 сен 2010, 20:50
Контактная информация:

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

Сообщение tma »

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 »

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 »

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 »

Блин, оказывается в 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
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение ded »

Блин, таки оказалос, что не елементарная задачка?
tma
Сообщения: 1809
Зарегистрирован: 18 сен 2010, 20:50
Контактная информация:

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

Сообщение tma »

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 »

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

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

Сообщение ded »

tma писал(а):Сейчас я позвоню в Cisco и скажу, чтобы время выводили только в UTC. Кто даст номер телефона? :lol:
80020935011 (обрати внимание - международный 800-й, а не российский! То есть из России звонить как по межгороду, 8-10-80020935011
Контакт: Юлия Лубенская
tma
Сообщения: 1809
Зарегистрирован: 18 сен 2010, 20:50
Контактная информация:

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

Сообщение tma »

Вытащить из 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
gosha
Сообщения: 375
Зарегистрирован: 06 сен 2010, 17:41
Контактная информация:

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

Сообщение gosha »

эхх, не понять 'чудакам' пушущим на языках на букву '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
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH