此问题在此处已有答案:
What are the reference epoch dates (and times) for various platforms and languages?(2个答案)
5天前关闭。
我正在写一个简单的c++20程序来获取一个文件的最后修改时间。在MacOS上,它工作正常,并返回一个昨天刚修改的文件的Unix历元时间(秒)。然而,在Windows和Visual Studio 2022上,下面的代码返回Got Modified Time of: 13314844775
,根据Unix时间戳工具,这里是369年后的未来。如何正确转换?
#include <iostream>
#include <filesystem>
#include <chrono>
int main()
{
std::string fileName = "test.txt";
auto modTime = std::filesystem::last_write_time(std::filesystem::path(fileName));
auto epoch = modTime.time_since_epoch();
auto converted = std::chrono::duration_cast<std::chrono::seconds>(epoch);
auto counts = converted.count();
std::cout << "Got Modified Time of: " << counts << std::endl;
}
1条答案
按热度按时间j7dteeu81#
last_write_time
的返回值是一个time_point
,它使用file_clock
时钟作为其时间的基础。此时钟可能 * 也可能 * 与任何其他时钟具有相同的历元。历元由实现定义。因此,程式码的行为会随着实作而变更。
如果你想得到一个文件相对于UNIX时间的时间,你需要C++20,它增加了
clock_cast
功能。这允许你把一个时间点转换成一个相对于另一个时钟的时间点。所以你可以这样做:在C++20中,要求
system_clock
在所有实现中都处于UNIX时间,并且要求file_clock
能够转换为system_clock
。