Как получить текущую временную метку в миллисекундах с 1970 года именно так, как Java получает

В Java мы можем использовать System.currentTimeMillis(), чтобы получить текущую временную метку в миллисекундах с момента времени, которая равна -

разница, измеренная в миллисекундах, между текущим временем и полночь, 1 января 1970 г. UTC.

В С++ как получить одно и то же?

В настоящее время я использую это, чтобы получить текущую временную метку -

struct timeval tp;
gettimeofday(&tp, NULL);
long int ms = tp.tv_sec * 1000 + tp.tv_usec / 1000; //get current timestamp in milliseconds

cout << ms << endl;

Это выглядит правильно или нет?

Ответ 1

Если у вас есть доступ к библиотекам С++ 11, ознакомьтесь с библиотекой std::chrono. Вы можете использовать его для получения миллисекунд с момента Unix Epoch:

#include <chrono>

// ...

using namespace std::chrono;
milliseconds ms = duration_cast< milliseconds >(
    system_clock::now().time_since_epoch()
);

Ответ 2

использовать <sys/time.h>

struct timeval tp;
gettimeofday(&tp, NULL);
long int ms = tp.tv_sec * 1000 + tp.tv_usec / 1000;

обратитесь к этому.

Ответ 3

Если вы используете gettimeofday, вам нужно отбрасывать дольше, иначе вы получите переполнение и, следовательно, не реальное число миллисекунд с эпохи: long int msint = tp.tv_sec * 1000 + tp.tv_usec/1000; даст вам число, подобное 767990892, которое равно 8 дням после эпохи; -).

int main(int argc, char* argv[])
{
    struct timeval tp;
    gettimeofday(&tp, NULL);
    long long mslong = (long long) tp.tv_sec * 1000L + tp.tv_usec / 1000; //get current timestamp in milliseconds
    std::cout << mslong << std::endl;
}

Ответ 4

Этот ответ очень похож на Oz. Использует <chrono> для C++ - я не получил его от Oz. хоть...

Я взял оригинальный фрагмент в нижней части этой страницы и немного изменил его, чтобы он стал полноценным консольным приложением. Я люблю использовать эту маленькую вещь. Это замечательно, если вы делаете много сценариев и нуждаетесь в надежном инструменте в Windows, чтобы получить эпоху за миллисекунды, не прибегая к использованию VB или некоторого менее современного, менее удобного для чтения кода.

#include <chrono>
#include <iostream>

int main() {
    unsigned __int64 now = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
    std::cout << now << std::endl;
    return 0;
}

Ответ 5

Начиная с С++ 11 вы можете использовать std::chrono:

  • получить текущее системное время: std::chrono::system_clock::now()
  • получить время с эпохи: .time_since_epoch()
  • перевести базовую единицу в миллисекунды: duration_cast<milliseconds>(d)
  • переведите std::chrono::milliseconds в целое число (uint64_t чтобы избежать переполнения)
#include <chrono>
#include <cstdint>
#include <iostream>

uint64_t timeSinceEpochMillisec() {
  using namespace std::chrono;
  return duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
}

int main() {
  std::cout << timeSinceEpochMillisec() << std::endl;
  return 0;
}

Ответ 6

Включите <ctime> и используйте функцию time.