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

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

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

35

Решение

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();
70

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector