Получение UTC, time()?
От: srg984  
Дата: 11.12.06 22:25
Оценка:
Помогите — совсем запутался
Мне нужно получить UTC в формате time_t, для этих целей всегда пользовался функцией time(), Но вот например, если вывести то что возвращает эта функция (не переводя значение в календарное время) и вывести то что возващает MySQL на запрос SELECT UNIX_TIMESTAMP(UTC_TIMESTAMP()); получаются разные значения... почему?
Re: Получение UTC, time()?
От: Shmakov Россия  
Дата: 12.12.06 10:20
Оценка:
Насколько разные =) Там с точностью до секунд =)))) может время прошло...

А вообще — может там с учетом локали и без? time выдает время по GMT, а база — зависит от настроек...
Re[2]: Получение UTC, time()?
От: srg984  
Дата: 12.12.06 18:43
Оценка:
Здравствуйте, Shmakov, Вы писали:

S>Насколько разные =) Там с точностью до секунд =)))) может время прошло...


S>А вообще — может там с учетом локали и без? time выдает время по GMT, а база — зависит от настроек...


разница как раз составляет смещение от GMT, тоесть получается что или time или mysql выдаёт метку локального временя

К стати.. GMT это одно и тоже UTC?

ЗЫ где можно посмотреть настройки базы?... и настройки ОС (FreeBSD) в части времени?
Re[3]: Получение UTC, time()?
От: Alex Kirhenshtein Латвия http://www.netxms.org
Дата: 12.12.06 19:40
Оценка:
Здравствуйте, srg984, Вы писали:

S>>А вообще — может там с учетом локали и без? time выдает время по GMT, а база — зависит от настроек...


time() зависит от локейла, вам нужен gmtime()
NetXMS: Open Source Network monitoring solution
Re[4]: Получение UTC, time()?
От: Аноним  
Дата: 12.12.06 21:55
Оценка:
Здравствуйте, Alex Kirhenshtein, Вы писали:

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


S>>>А вообще — может там с учетом локали и без? time выдает время по GMT, а база — зависит от настроек...


AK>time() зависит от локейла, вам нужен gmtime()

а как проверить этот "локейл"? потому что по манам, time возвращает UTC... аgmtime — переводит в календарное время (опять же по манам) не делая выравнивания времени относительно часового пояса...

вот... задача то простая... нужно получить с-ишными функциями временную метку с GMT 0 ... но как то вот не понятно мне...
Re[5]: Получение UTC, time()?
От: Alex Kirhenshtein Латвия http://www.netxms.org
Дата: 13.12.06 08:49
Оценка:
Здравствуйте, <Аноним>, Вы писали:

Ох. Торможу нещадно. Да, time отдает секунды с UTC. gmtime() это аналог localtime() — но не производит конвертации.

По теме:

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

If called with no argument, returns a Unix timestamp (seconds since '1970-01-01 00:00:00' UTC) as an unsigned integer. If UNIX_TIMESTAMP() is called with a date argument, it returns the value of the argument as seconds since '1970-01-01 00:00:00' UTC. date may be a DATE string, a DATETIME string, a TIMESTAMP, or a number in the format YYMMDD or YYYYMMDD. The server interprets date as a value in the current time zone and converts it to an internal value in UTC. Clients can set their time zone as described in Section 5.11.8, “MySQL Server Time Zone Support”.


Посмотреть таймзону: mysqladmin -u root -p variables | system_time_zone (может и иначе можно — не знаю, не пользуюсь)
Ну и всякое по времени: http://dev.mysql.com/doc/refman/5.0/en/time-zone-support.html
NetXMS: Open Source Network monitoring solution
Re[3]: Получение UTC, time()?
От: Vladimir D Belousov Россия  
Дата: 13.12.06 09:47
Оценка:
Здравствуйте, srg984, Вы писали:

S>ЗЫ где можно посмотреть настройки базы?... и настройки ОС (FreeBSD) в части времени?


Раз FreeBSD, то не используйте time(). Он считается устаревшим.
Используйте gettimeofday() или clock_gettime().
Первое — библиотечная функция и возвращает структуру, где первый элемент long,
воторое — системный вызов и возвращет структуру, где первый элемент time_t.
В обоих случях это — кол-во сек. с начала эпохи, НО всё равно с учетом часового пояса.

Однако, если Вы далее с этим time_t хотите как-то работать и подразумевать, что это кол-во секунд по UTC, то можно просто установить переменную окружения TZ в значение UTC0, и тогда функции типа strftime будут возвращать время, соотв. GMT (UTC).

Если же вам нужно чисто получить то значение time_t, которое в поясе GMT, то наверное можно воспользоваться
long tm_gmtoff; /* offset from UTC in seconds */ (struct tm, который возвращается функциями типа localtime, gmtime).
Но только при этом не устанавливайте TZ.

А вообще, решение найти легко, если рассматривать конкретную задачу.
В данном случае просто непонятно, зачем Вам нужно time_t
--
Спасибо
Re[4]: Получение UTC, time()?
От: Vladimir D Belousov Россия  
Дата: 13.12.06 09:54
Оценка:
Здравствуйте, Vladimir D Belousov, Вы писали:

VDB>В обоих случях это — кол-во сек. с начала эпохи, НО всё равно с учетом часового пояса.


Что "с учетом часового пояса" — гон
Правильнее, что бОльшая часть функций для работы с этим значением будут учитывать часовой пояс.
--
Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.