Подтвердить что ты не робот

Получите отметку времени Unix с С++

Как мне получить временную метку uint unix в С++? Я немного искал googled, и кажется, что большинство методов ищут более запутанные способы представления времени. Не могу ли я получить его как uint?

4b9b3361

Ответ 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;
}

Ответ 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, но на практике это очень вероятно.