Как мне получить временную метку uint
unix в С++? Я немного искал googled, и кажется, что большинство методов ищут более запутанные способы представления времени. Не могу ли я получить его как uint
?
Получите отметку времени Unix с С++
Ответ 1
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";
}
Ответ 2
#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;
}
Ответ 3
Самый распространенный совет неверен, вы не можете просто полагаться на time()
. Это используется для относительного времени: ISO С++ не указывает, что 1970-01-01T00:00Z
есть time_t(0)
Что еще хуже, вы тоже не можете легко понять это. Конечно, вы можете найти календарную дату time_t(0)
с помощью gmtime
, но что вы собираетесь делать, если это 2000-01-01T00:00Z
? Сколько секунд было между 1970-01-01T00:00Z
и 2000-01-01T00:00Z
? Это, конечно, не кратно 60, из-за прыжков секунд.
Ответ 4
#include <iostream>
#include <sys/time.h>
using namespace std;
int main ()
{
unsigned long int sec= time(NULL);
cout<<sec<<endl;
}
Ответ 5
Windows использует разные единицы времени и времени: см. Преобразовать Windows Filetime на второй в Unix/Linux
То, что std:: time() возвращает в Windows, пока неизвестно мне (; -))
Ответ 6
Я создал глобальное определение с дополнительной информацией:
#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
Поместите эти строки в файл заголовка. Я считаю, что это очень полезно для отладки и т.д.
Ответ 7
Поскольку это первый результат в Google, и пока нет ответа С++ 11, здесь, как использовать std::chrono для этого:
#include <chrono>
...
using namespace std::chrono;
int64_t timestamp = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
Обратите внимание, что этот ответ не гарантирует, что эпоха наступит 01.01.1970, но на практике это очень вероятно.