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

Получите время с эпохи в миллисекундах, предпочтительно используя С++ 11 chrono

Все, что я хочу, - это получить время с эпохи в миллисекундах и сохранить его в unsigned long.

Я нашел этот связанный вопрос. Но, честно говоря, это не самый простой способ выполнить такую ​​простую задачу, не так ли? Я надеюсь на что-то гораздо более простое, но ничего не могу найти в std:: chrono reference. Любые советы приветствуются. Мне не обязательно использовать std::chrono, но я хочу, чтобы он был независимым от платформы.

4b9b3361

Ответ 1

unsigned long milliseconds_since_epoch =
    std::chrono::system_clock::now().time_since_epoch() / 
    std::chrono::milliseconds(1);

хотя, тем более, что вам нужна независимость от платформы, лучше заменить unsigned long на тип, который скорее всего будет достаточно большим:

  • (unsigned) long long
  • std::(u)int64_t
  • std::chrono::milliseconds::rep
  • auto

Для меня это явно указывает на то, что вы рискуете потеря точности (по аналогии с целым делением) и что вы оставляете безопасность системы типов (делясь на типизированное время, чтобы дать единичное число), Однако, как показано в комментариях, некоторые люди скажут, что любая попытка отойти от безопасности типа должна сопровождаться преднамеренной попыткой сделать код опасным. Если вам нужно иметь дело с людьми, которые придерживаются этой веры, было бы проще использовать duration_cast вместо того, чтобы вступать в аргумент о нерелевантных стилистических вариантах:

unsigned long milliseconds_since_epoch = 
    std::chrono::duration_cast<std::chrono::milliseconds>
        (std::chrono::system_clock::now().time_since_epoch()).count();