Название: Convert Unix timestamp to Readable Date/time Отправлено: NicK от Ноябрь 25, 2009, 17:34 Есть строка в формате unix time, например: 1246012546357
Каким образом мне получить из нее нормальную дату? Название: Re: Convert Unix timestamp to Readable Date/time Отправлено: Rcus от Ноябрь 25, 2009, 17:38 time_t же, соответственно и искать в справке его надо QDateTime QDateTime::fromTime_t ( uint seconds ) [static]
Название: Re: Convert Unix timestamp to Readable Date/time Отправлено: lit-uriy от Ноябрь 25, 2009, 18:07 Для справки:
в Юниксах время измеряется в секундах от 1 января 1970г 0часов 0мин 0сек Название: Re: Convert Unix timestamp to Readable Date/time Отправлено: NicK от Ноябрь 25, 2009, 18:22 Пытаюсь парсить логи Openfire, где дата каждого сообщения выглядит не стандартным 10-символьным числом unixtime, а 13-символьным.
Пытался вот так делать: Код: #include <QtCore> Цитировать QDateTime("pon. lis 5 17:07:32 2007") Все нормально работает, но если вместо числа 1194278852, указанного в примере, задать нужное мне значение 1246012546357то получим это: Цитировать ошибка: целая константа слишком велика для типа ‘long’ предупреждение: неявное приведение большого целого значения к беззнаковому типу Т.к. нужное мне число 1246012546357 больше, чеммодет в себя вместить тип uint. онлайн конвертер (http://www.onlineconversion.com/unix_time.htm (http://www.onlineconversion.com/unix_time.htm)) преобразует мои числа нормально. как это сделать мне? Название: Re: Convert Unix timestamp to Readable Date/time Отправлено: Alex Custov от Ноябрь 25, 2009, 18:51 онлайн конвертер (http://www.onlineconversion.com/unix_time.htm (http://www.onlineconversion.com/unix_time.htm)) преобразует мои числа нормально. как это сделать мне? Wed, 26 Jul 41454 12:12:37 GMT? ;D ;D Возможно это в миллисекундах, соответственно делить на 1000, и тогда получится уже что-то вменяемое: Fri, 26 Jun 2009 10:35:46 GMT Название: Re: Convert Unix timestamp to Readable Date/time Отправлено: NicK от Ноябрь 27, 2009, 01:52 Цитировать Возможно это в миллисекундах, соответственно делить на 1000, и тогда получится уже что-то вменяемое: Да, действительно, это миллисекунды.Fri, 26 Jun 2009 10:35:46 GMT Сделал такую штуку и подсунул то самое 13 символьное число в формате time_t: Код: QDateTime unixtime2datetime(QString strUnixDate) В итоге получаю: QDateTime("Пт июня 26 14:35:46 2009") Т.е. все, как надо, спасибо :-) А как сделать обратное преобразование QDateTime в этот 13 символьный time_t? Пробовал QDateTime::toTime_t(), но так выводится только 10 цифр, видимо, без учета миллисекунд. :-( Название: Re: Convert Unix timestamp to Readable Date/time Отправлено: spectre71 от Ноябрь 27, 2009, 02:05 Цитировать Возможно это в миллисекундах, соответственно делить на 1000, и тогда получится уже что-то вменяемое: Да, действительно, это миллисекунды.Fri, 26 Jun 2009 10:35:46 GMT Сделал такую штуку и подсунул то самое 13 символьное число в формате time_t: Код: QDateTime unixtime2datetime(QString strUnixDate) В итоге получаю: QDateTime("Пт июня 26 14:35:46 2009") Т.е. все, как надо, спасибо :-) А как сделать обратное преобразование QDateTime в этот 13 символьный time_t? Пробовал QDateTime::toTime_t(), но так выводится только 10 цифр, видимо, без учета миллисекунд. :-( Код
uint QDateTime::toTime_t () - секунды QDateTime::time ()::msec() - милисекунды Вроде так Название: Re: Convert Unix timestamp to Readable Date/time Отправлено: Zmeishe от Ноябрь 27, 2009, 10:13 Возможно это в миллисекундах, соответственно делить на 1000, и тогда получится уже что-то вменяемое: Я бы не стал делить на 1000. Лучше умножить на 0.001 Однажды напоролся на такие грабли - полдня в ступоре был. Теперь, если есть возможность деление заменить умножением, лучше умножить. И тогда получится ещё более вменяемое. Название: Re: Convert Unix timestamp to Readable Date/time Отправлено: spectre71 от Ноябрь 27, 2009, 10:31 Возможно это в миллисекундах, соответственно делить на 1000, и тогда получится уже что-то вменяемое: Я бы не стал делить на 1000. Лучше умножить на 0.001 Однажды напоролся на такие грабли - полдня в ступоре был. Теперь, если есть возможность деление заменить умножением, лучше умножить. И тогда получится ещё более вменяемое. Возможно у тебя и были какие-то грабли, но это не значит что в данном случае ты прав. Однозначно делить но 1000! Название: Re: Convert Unix timestamp to Readable Date/time Отправлено: Zmeishe от Ноябрь 27, 2009, 10:50 Грабли очень простые
В штриховом коде сумма в копейках 7240 При делении на 100 получалось 72.39999999, а при умножении на 0.01 получалось 72.40 На экране во вьюхе обе суммы выглядели одинаково, но в памяти они были разными. Название: Re: Convert Unix timestamp to Readable Date/time Отправлено: spectre71 от Ноябрь 27, 2009, 10:54 Грабли очень простые В штриховом коде сумма в копейках 7240 При делении на 100 получалось 72.39999999, а при умножении на 0.01 получалось 72.40 На экране во вьюхе обе суммы выглядели одинаково, но в памяти они были разными. Ты видишь что здесь целочисленная арифметика. А с ней как правило ситуация с точностью до наоброт - уж поверь. |