如何查找历元时间戳和std::chrono::system_clock::now之间的时间差(以毫秒为单位) 我创建了一个C++应用程序,其中包括使用STD::计时来计算时间差异。 在某个时刻,我将一个文件上传到服务器,作为响应,我从receive.php获得一个epoch时间戳,当文件完全上传到服务器时,它会通知时间戳。我想计算这个历元时间戳和我选择的起点之间的时间差,因为我不应该改变receive.php的工作方式。 到目前为止,我试图通过使用以下代码实现这一点: #include <iostream> #include <chrono> using namespace std; int main() { auto epoch1 = std::chrono::system_clock::now().time_since_epoch() ; auto epoch2= std::chrono::duration<long long>(epoch_time_stamp); auto diff = epoch1 - epoch2 ; auto s = std::chrono::duration_cast<std::chrono::milliseconds>(diff); cout << s.count() << endl; } #包括 #包括 使用名称空间std; int main() { auto-epoch1=std::chrono::system_clock::now().time_since_epoch(); 自动epoch2=std::chrono::duration(历元时间戳); 自动差异=epoch1-epoch2; 自动s=std::chrono::持续时间(差异); 您可能已经知道,您的epoch\u time\u stamp是自1970-01-01 00:00:00 UTC以来的毫秒计数。当您说: auto epoch2= std::chrono::duration<long long>(epoch_time_stamp);

如何查找历元时间戳和std::chrono::system_clock::now之间的时间差(以毫秒为单位) 我创建了一个C++应用程序,其中包括使用STD::计时来计算时间差异。 在某个时刻,我将一个文件上传到服务器,作为响应,我从receive.php获得一个epoch时间戳,当文件完全上传到服务器时,它会通知时间戳。我想计算这个历元时间戳和我选择的起点之间的时间差,因为我不应该改变receive.php的工作方式。 到目前为止,我试图通过使用以下代码实现这一点: #include <iostream> #include <chrono> using namespace std; int main() { auto epoch1 = std::chrono::system_clock::now().time_since_epoch() ; auto epoch2= std::chrono::duration<long long>(epoch_time_stamp); auto diff = epoch1 - epoch2 ; auto s = std::chrono::duration_cast<std::chrono::milliseconds>(diff); cout << s.count() << endl; } #包括 #包括 使用名称空间std; int main() { auto-epoch1=std::chrono::system_clock::now().time_since_epoch(); 自动epoch2=std::chrono::duration(历元时间戳); 自动差异=epoch1-epoch2; 自动s=std::chrono::持续时间(差异); 您可能已经知道,您的epoch\u time\u stamp是自1970-01-01 00:00:00 UTC以来的毫秒计数。当您说: auto epoch2= std::chrono::duration<long long>(epoch_time_stamp);,c++,epoch,chrono,C++,Epoch,Chrono,然后我想你会开始得到你认为合适的结果 我发现使用以下别名创建模板很有帮助: template <class D> using sys_time = std::chrono::time_point<std::chrono::system_clock, D>; 有关的更多详细信息,请参见此。复杂的答案: auto epoch2=decltype(std::chrono::system_clock::now(); 更简单的答案是: auto-epoch2=std::chro

然后我想你会开始得到你认为合适的结果

我发现使用以下别名创建模板很有帮助:

template <class D>
using sys_time = std::chrono::time_point<std::chrono::system_clock, D>;

有关
的更多详细信息,请参见此。

复杂的答案:

auto epoch2=decltype(std::chrono::system_clock::now();
更简单的答案是:

auto-epoch2=std::chrono::毫秒(历元时间戳);
所以你猜对了。持续时间声明中缺少的是比率(也称为单位)。在这种情况下,它应该是std::milli;和
使用毫秒=持续时间;
,这会给出更简单的答案

复杂的答案是确定由
std::chrono::system\u clock::now().time\u since\u epoch()
返回的类型,然后使用epoch时间戳调用该类型的构造函数

template <class D>
using sys_time = std::chrono::time_point<std::chrono::system_clock, D>;
auto remote_time = sys_time<milliseconds>{milliseconds{epoch_time_stamp}};
cout << duration_cast<milliseconds>(system_clock::now() - remote_time).count() << "ms\n";