Получить метку времени Unix с помощью C++
Как сделать uint
метка времени unix в C++? Я немного погуглил, и кажется, что большинство методов ищут более запутанные способы представления времени. Я не могу просто получить его как uint
?
6 ответов
time()
самая простая функция-секунды с эпохи. Linux manpage здесь.
страница cppreference, связанная выше, дает это пример:
#include <ctime>
#include <iostream>
int main()
{
std::time_t result = std::time(nullptr);
std::cout << std::asctime(std::localtime(&result))
<< result << " seconds since the Epoch\n";
}
#include<iostream>
#include<ctime>
int main()
{
std::time_t t = std::time(0); // t is an integer type
std::cout << t << " seconds since 01-Jan-1970\n";
return 0;
}
самый распространенный совет неправильный, вы не можете просто положиться на time()
. Это используется для относительного времени: ISO C++ не указывает, что 1970-01-01T00:00Z
is time_t(0)
хуже всего то, что вы также не можете легко понять это. Конечно, вы можете найти календарную дату time_t(0)
С gmtime
, но что вы собираетесь делать, если это 2000-01-01T00:00Z
? Сколько секунд прошло между ... --1--> и 2000-01-01T00:00Z
? Это, конечно, не кратно 60, из-за високосных секунд.
#include <iostream>
#include <sys/time.h>
using namespace std;
int main ()
{
unsigned long int sec= time(NULL);
cout<<sec<<endl;
}
Windows использует разные эпохи и единицы времени: см. преобразование Windows Filetime во второй в Unix / Linux
что std::time() возвращает в Windows (пока) мне неизвестно (; -))
Я создал глобальное определение с дополнительной информацией:
#include <iostream>
#include <ctime>
#include <iomanip>
#define INFO std::cout << std::put_time(std::localtime(&time_now), "%y-%m-%d %OH:%OM:%OS") << " [INFO] " << __FILE__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") >> "
#define ERROR std::cout << std::put_time(std::localtime(&time_now), "%y-%m-%d %OH:%OM:%OS") << " [ERROR] " << __FILE__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") >> "
static std::time_t time_now = std::time(nullptr);
используйте его так:
INFO << "Hello world" << std::endl;
ERROR << "Goodbye world" << std::endl;
пример вывода:
16-06-23 21:33:19 [INFO] src/main.cpp(main:6) >> Hello world
16-06-23 21:33:19 [ERROR] src/main.cpp(main:7) >> Goodbye world
поместите эти строки в файл заголовка. Я нахожу это очень полезным для отладки и т. д.