Временные зоны
От: srmxx  
Дата: 15.12.11 14:48
Оценка:
Здроавствуйте. Мне нужно реализовать фцункциональность для преобразования даты из GMT в конкретную временную зону (по названию) в линуксе.

Начал копаться в апишках, всё что нашёл — функция tzfile.
Описание ужасное. Я не понимаю какие аргументы ей нужны, какого типа.
Re: Временные зоны
От: citrin Россия http://citrin.ru/
Дата: 15.12.11 15:43
Оценка:
Здравствуйте, srmxx, Вы писали:

S>Здроавствуйте. Мне нужно реализовать фцункциональность для преобразования даты из GMT в конкретную временную зону (по названию) в линуксе.


1. Выставляете переменную окружения TZ=UTC

2. Переводите дату в unix timestamp — strptime()

3. Выставляете переменную окружения, например TZ=Asia/Vladivostok

4. Печатаете время — strftime()
Re[2]: Временные зоны
От: citrin Россия http://citrin.ru/
Дата: 15.12.11 15:54
Оценка:
C>1. Выставляете переменную окружения TZ=UTC
C>2. Переводите дату в unix timestamp — strptime()
C>3. Выставляете переменную окружения, например TZ=Asia/Vladivostok
C>4. Печатаете время — strftime()

Глянул маны — делать нужно немного не так:

1. strptime(): string -> struct tm
2. setenv TZ=UTC, tzset()
3. mktime(): struct tm -> unix timestamp;
4. setenv TZ=Asia/Vladivostok, tzset()
5. localtime(): unix timestamp -> struct tm
6. strftime(): struct tm -> string
Re[3]: Временные зоны
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 19.12.11 07:56
Оценка:
Здравствуйте, citrin, Вы писали:

C>>1. Выставляете переменную окружения TZ=UTC

C>>2. Переводите дату в unix timestamp — strptime()
C>>3. Выставляете переменную окружения, например TZ=Asia/Vladivostok
C>>4. Печатаете время — strftime()

C>Глянул маны — делать нужно немного не так:


C>1. strptime(): string -> struct tm

C>2. setenv TZ=UTC, tzset()
C>3. mktime(): struct tm -> unix timestamp;
C>4. setenv TZ=Asia/Vladivostok, tzset()
C>5. localtime(): unix timestamp -> struct tm
C>6. strftime(): struct tm -> string

Угу, но я бы рекомендовал делать эти игры в отдельном процессе, который завершается сразу по получению результата. Это достаточно дёшево (если fork без exec) и гарантирует отсутствие хитрых эффектов от переключения зон.
The God is real, unless declared integer.
Re[4]: Временные зоны
От: Аноним  
Дата: 23.12.11 15:26
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, citrin, Вы писали:


C>>>1. Выставляете переменную окружения TZ=UTC

C>>>2. Переводите дату в unix timestamp — strptime()
C>>>3. Выставляете переменную окружения, например TZ=Asia/Vladivostok
C>>>4. Печатаете время — strftime()

C>>Глянул маны — делать нужно немного не так:


C>>1. strptime(): string -> struct tm

C>>2. setenv TZ=UTC, tzset()
C>>3. mktime(): struct tm -> unix timestamp;
C>>4. setenv TZ=Asia/Vladivostok, tzset()
C>>5. localtime(): unix timestamp -> struct tm
C>>6. strftime(): struct tm -> string

N>Угу, но я бы рекомендовал делать эти игры в отдельном процессе, который завершается сразу по получению результата. Это достаточно дёшево (если fork без exec) и гарантирует отсутствие хитрых эффектов от переключения зон.


хуясе
надо на отдельном серваке, чтобы от NTP не зависеть
Re[5]: Временные зоны
От: Roman Odaisky Украина  
Дата: 24.12.11 19:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>надо на отдельном серваке, чтобы от NTP не зависеть


А NTP тут причем? NTP устанавливает время по UTC — сколько секунд прошло с определенного момента в прошлом, это вообще никак не пересекается с часовыми поясами.
До последнего не верил в пирамиду Лебедева.
Re: Временные зоны
От: Cyberax Марс  
Дата: 27.12.11 07:18
Оценка:
Здравствуйте, srmxx, Вы писали:

S>Здроавствуйте. Мне нужно реализовать фцункциональность для преобразования даты из GMT в конкретную временную зону (по названию) в линуксе.

Нормальным способом — никак. Самое близкое, что есть — boost.datetime. Там к нему .csv файл с описанием зон прилагается, который он использует.

Как прочитать системную информацию — я так и не разобрался.
Sapienti sat!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.