我可以得到当前的epoch时间,以毫秒为单位:
#include <chrono>
#include <cstdint>
#include <iostream>
#include <ctime>
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;
}
这将输出:1597436329290.
我有一个代码片段,它使用以秒为单位的纪元时间,工作正常。如何使用timeSinceEpochMillisec()来格式化strftime中的日期和时间?
std::time_t epoch_timestamp = std::time(nullptr);
char buf[80];
std::tm *ts = std::gmtime(&epoch_timestamp);
strftime(buf, sizeof(buf), "%m/%d/%Y %H:%M:%S", ts);
std::cout << buf << std::endl;
产出:
1597437386198
08/14/2020/ 20:36:26
1条答案
按热度按时间wvt8vs2t1#
不幸的是,chrono库只处理时间,而不是日期。看起来像是things will change in C++20,但现在我们必须使用
ctime
库中的函数和类型。也就是说,使用
SomeClock::now()
获取当前时间后,可以使用to_time_t
将其从ctime
库转换为std::time_t
。在此之后,不再涉及chrono库,只有ctime库。参见this和this堆栈溢出问题。
一个
std::time_t
通常是指从1970年1月1日00:00开始经过的秒数。您的timeSinceEpochMillisec
函数与此类似,但它给出的是毫秒数。如果将其输出除以1000并得到整数结果,您可能会得到与std::time(nullptr)
相同的数字,但这可能与实现有关(std::time_t
可能定义不同)。运行下面的代码并查看注解。