Время Unix в соответствии с местным временем

У меня есть функция, которая возвращает метку времени в unix-времени как int.

Мне нужно преобразовать это int в строку dd/mm/yy по местному времени. «Локальная» часть вызывает у меня проблемы, если бы не это, я мог бы просто создать свою собственную функцию для ее преобразования.

Я искал вокруг, и кажется, что класс ctime из стандартной библиотеки был бы идеальным для этого, например:

int unixtime;

std::cout << std::asctime(std::localtime(unixtime));

К сожалению, принимается только *time_t. Есть ли способ преобразовать int в этот формат или какой-либо лучший способ получить местное время из времени unix как int?


person user129186    schedule 30.05.2014    source источник


Ответы (5)


time_t по определению является арифметическим типом, вы можете просто сделать:

time_t ts = unixtime;
std::cout << std::asctime(std::localtime(&ts));
person filmor    schedule 30.05.2014
comment
Спасибо, очень признателен. - person user129186; 30.05.2014

'/* localtime example */
#include <stdio.h>      /* puts, printf */
#include <time.h>       /* time_t, struct tm, time, localtime */

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;

  time (&rawtime);
  timeinfo = localtime (&rawtime);
  printf ("Current local time and date: %s", asctime(timeinfo));

  return 0;
}'

Вы можете просто использовать тип time_t, это даст вам время.

person Ali786    schedule 30.05.2014

«Все функции ctime(), gmtime() и localtime() принимают аргумент типа данных time_t, который представляет календарное время. При интерпретации как абсолютное значение времени он представляет количество секунд, прошедших с начала эпохи, 1970-01-. 01 00:00:00 +0000 (UTC)".

источники:

person user3611557    schedule 30.05.2014

Чтобы напечатать текущее время в формате дд/мм/гг, вы можете попробовать следующее:

#include <iostream>
#include <ctime>

int main(int argc, const char** argv)
{
    char date_buff[40];
    time_t time_value = time(0);
    struct tm* my_tm = localtime(&time_value);
    strftime(date_buff, sizeof(date_buff), "%d/%m/%y\n", my_tm);
    std::cout << date_buff << std::endl;
    return 0;
}
person Dr. Debasish Jana    schedule 30.05.2014

Тип time_t не гарантируется спецификацией C.

Системы, совместимые с Unix и POSIX, реализуют тип time_t как целое число со знаком (обычно шириной 32 или 64 бита), которое представляет количество секунд с начала эпохи Unix. Итак, вы можете просто сделать следующее

std::time_t my_time = static_cast<std::time_t>(unixtime);

Однако лучше не считать время int и заменить функцию времени соответствующей обработкой времени и вернуть std::time_t или struct tm.

person HAL    schedule 30.05.2014