C ++: как получить фактическое время с учетом времени и местного времени?

Я ищу способ сэкономить время в стиле HH :: MM :: SS в C ++. Я увидел здесь множество решений и после небольшого исследования выбрал время и местное время .Однако кажется, что функция localtime немного сложна, поскольку она говорит :

Все вызовы localtime и gmtime используют одну и ту же статическую структуру, поэтому каждый вызов перезаписывает результаты предыдущего вызова.

Проблема, вызванная этим, показана в следующем фрагменте кода:

#include 
#include 
using namespace std;

int main() {
time_t t1 = time(0);   // get time now
struct tm * now = localtime( & t1 );

std::cout << t1 << std::endl;
sleep(2);
time_t t2 = time(0);   // get time now
struct tm * now2 = localtime( & t2 );
std::cout << t2 << std::endl;

cout << (now->tm_year + 1900) << '-'
     << (now->tm_mon + 1) << '-'
     <<  now->tm_mday << ", "
     << now->tm_hour << ":" << now->tm_min << ":" << now->tm_sec
     << endl;

cout << (now2->tm_year + 1900) << '-'
     << (now2->tm_mon + 1) << '-'
     <<  now2->tm_mday << ", "
     << now2->tm_hour << ":" << now2->tm_min << ":" << now2->tm_sec
     << endl;
}

Типичный вывод для этого:

1320655946
1320655948
2011-11-7, 9:52:28
2011-11-7, 9:52:28

Итак, как вы можете видеть, временные метки time_t верны, но местное время все портит.

У меня вопрос: как преобразовать метку времени типа time_t в удобочитаемое время?

14
задан seb 7 November 2011 в 09:03
поделиться