Вопрос с отметкой времени - PullRequest
1 голос
/ 13 апреля 2011

Я получил строку с отметкой времени как 3.44063E+08.Как я могу преобразовать его в обычное время, например 12:10:22 и т. Д.

Ответы [ 3 ]

4 голосов
/ 13 апреля 2011

Числовое значение равно 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(&tt);

    strftime(buf, 31, "%Y-%m-%d %H:%M:%S", &tm);
    printf("%s\n", 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 , который может предложить многое. Но, как показал мой пример, для простого преобразования «число в текст» оно не требуется.

1 голос
/ 13 апреля 2011

Было бы полезно гораздо больше контекста, но, если он у вас уже есть, 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.

1 голос
/ 13 апреля 2011

Временная метка в экспоненциальном формате означает, что кто-то использовал счетчики времени с плавающей запятой и не обращал внимания, когда писал код для его печати. Если все, что у вас есть, это фрагмент текста, вы не сможете преобразовать его в точное время, так как оно точно с точностью до 1000 секунд (около 20 минут). Если у вас есть оригинал в виде двойного, вы можете получить точное время от него. Если у вас есть это как поплавок, бог вам в помощь.

Число (вероятно) time_t, которое является количеством секунд с начала Unix (1 января 1970 года). Вы можете преобразовать его в разбитую временную структуру (год, месяц и т. Д.), Используя gmtime () или localtime (), а затем в любой текстовый формат, который вы хотите, используя strftime (). Если у вас есть только текст, а не фактическое число, вам придется сначала проанализировать его с помощью strtod ().

...