#c #timestamp
#c #временная метка
Вопрос:
Я получил строку временной метки в виде этого 3.44063E 08
. Как я могу преобразовать его в обычное время, например, 12: 10: 22 и т.д.
Комментарии:
1. Откуда у вас временная метка? Как вы получили временную метку? Или, другими словами, пожалуйста, покажите, что у вас уже есть.
2. Я получаю if из файла журнала системного приложения winxp
3. Откуда вы взяли временную метку? Что это за приложение? Что это за вызов функции?
Ответ №1:
Числовым значением является a time_t
, вам нужно преобразовать его в местное или зеленое время, которое localtime()
или gmtime()
, соответственно, после чего вы можете использовать strftime()
для печати в выбранном вами формате.
Вот краткий и полный пример:
edd@max:/tmp$ cat timeformat.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
time_t tt = 3.44063E 08;
struct tm tm;
char buf[32];
tm = *localtime(amp;tt);
strftime(buf, 31, "%Y-%m-%d %H:%M:%S", amp;tm);
printf("%sn", buf);
return 0;
}
edd@max:/tmp$ gcc -o timeformat timeformat.c
edd@max:/tmp$ ./timeformat
1980-11-25 23:03:20
edd@max:/tmp$
Редактировать: И поскольку вы отметили свой вопрос C , взгляните на Boost Date_Time, который может многое предложить. Но, как показал мой пример, для простого преобразования «числа в текст» вам это не нужно.
Ответ №2:
Временная метка в экспоненциальном формате означает, что кто-то использовал счетчики времени с плавающей запятой и не обращал внимания, когда писал код для ее печати. Если у вас есть только этот фрагмент текста, вы не сможете преобразовать его в точное время, поскольку оно с точностью всего до 1000 секунд (около 20 минут). Если у вас действительно есть оригинал в виде double, вы можете получить из него точное время. Если у вас это значение с плавающей точкой, да поможет вам бог.
Это число (вероятно) является time_t, которое представляет собой количество секунд, прошедших с эпохи Unix (1 января 1970 года). Вы можете преобразовать его в структуру с разбивкой по времени (год, месяц и т.д.), Используя gmtime () или localtime (), А затем в любой текстовый формат, который вы хотите, используя strftime(). Если у вас есть только текст, а не фактическое число, вам придется сначала разобрать его до числа с помощью strtod().
Ответ №3:
Было бы полезно намного больше контекста, но предполагая, что он у вас уже есть, 3.44063E 08 равно 344063000, который в качестве time_t преобразуется в 1980-11-26 05:03:20 (utc). Если это имеет смысл для вас как временная метка, то это time_t: количество секунд с 1970-01-01.
Другая возможность заключается в том, что он был получен из Excel или другого продукта Microsoft Office, который хранит даты в виде дней с 1900 или 1899 в некоторых случаях. Это преобразуется в некоторую дату в 943,893 году. Если это имеет смысл, например, если вы выполняете астрономические или медленные вычисления радиоизотопов и т.д., Тогда это рано утром, примерно в 03: 42.