Получите метку времени Unix с C ++ - PullRequest
53 голосов
/ 16 мая 2011

Как мне получить uint метку времени Unix в C ++? Я немного погуглил, и кажется, что большинство методов ищут более запутанные способы представления времени. Разве я не могу просто получить это как uint?

Ответы [ 6 ]

60 голосов
/ 16 мая 2011

time() - самая простая функция - секунды с начала эпохи. Страница Linux здесь .

На приведенной выше странице 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";
}
34 голосов
/ 16 мая 2011
#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;
}
15 голосов
/ 17 мая 2011

Самый распространенный совет неверен, вы не можете просто положиться на time(). Это используется для относительной синхронизации: ISO C ++ не определяет, что 1970-01-01T00:00Z равно time_t(0)

Что еще хуже, вы тоже не можете с этим легко разобраться. Конечно, вы можете найти календарную дату time_t(0) с gmtime, но что вы собираетесь делать, если это 2000-01-01T00:00Z? Сколько секунд было между 1970-01-01T00:00Z и 2000-01-01T00:00Z? Это, конечно, не кратно 60, из-за високосных секунд.

6 голосов
/ 16 мая 2011
#include <iostream>
#include <sys/time.h>

using namespace std;

int main ()
{
  unsigned long int sec= time(NULL);
  cout<<sec<<endl;
}
4 голосов
/ 06 ноября 2013

Windows использует разные эпоху и единицы времени: см. Преобразование времени файла Windows в секунду в Unix / Linux

Что возвращает std :: time () в Windows (пока что) неизвестномне (; -))

2 голосов
/ 24 июня 2016

Я создал глобальное определение с дополнительной информацией:

#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

Поместите эти строкив вашем заголовочном файле.Я считаю это очень полезным для отладки и т. Д.

...