表示纪元之前的日期 我们有一个定制的日期时间C++类,它代表了从历代以来通过的秒数的时间。这被存储为int64。这个类提供了许多帮助函数来读取和写入各种类型的日期时间格式

表示纪元之前的日期 我们有一个定制的日期时间C++类,它代表了从历代以来通过的秒数的时间。这被存储为int64。这个类提供了许多帮助函数来读取和写入各种类型的日期时间格式,c++,c,windows,datetime,epoch,C++,C,Windows,Datetime,Epoch,不幸的是,它不能处理纪元之前的日期,因为它的方法依赖于gmtime()和mktime()进行许多操作,而在我们的windows系统上不支持纪元之前的日期。有人知道在windows上支持负值的gmtime和mktime的替代品吗 这个限制的一个例子是我们的应用程序无法存储1970年之前的生日,这是因为每个日期都必须使用这个类 我不清楚我在问什么,这是因为我对datetime实现/使用的知识有限,而且我不太愿意理解这个庞大的遗留类,所以如果您觉得这个问题可以用另一种方式构建,或者我可能会寻找不同的东

不幸的是,它不能处理纪元之前的日期,因为它的方法依赖于gmtime()和mktime()进行许多操作,而在我们的windows系统上不支持纪元之前的日期。有人知道在windows上支持负值的gmtime和mktime的替代品吗

这个限制的一个例子是我们的应用程序无法存储1970年之前的生日,这是因为每个日期都必须使用这个类

我不清楚我在问什么,这是因为我对datetime实现/使用的知识有限,而且我不太愿意理解这个庞大的遗留类,所以如果您觉得这个问题可以用另一种方式构建,或者我可能会寻找不同的东西,请随意提建议。

您可以使用,或者直接使用CRT而不是CRT

您可能需要进行大量测试,以确保数据处理不会在返工过程中发生变化。在开始任何重构之前,确保对库进行了详尽的单元测试


如果你必须考虑你的价值观在世界上多个不同的地点是有效的,作为你的规范形式,并根据需要从当地时间翻译成合理的输入/显示。

也许你已经解决了这个问题,因为它是几年前,但你也可以使用ICU。示例如下:

即将来到您身边的一家酒店:

#include <chrono>
#include <iostream>

int
main()
{
    using namespace std::chrono;
    std::cout << "Valid range is ["
              << sys_days{year::min()/January/1} + 0us << ", "
              << sys_days{year::max()/December/31} + 23h + 59min + 59s + 999'999us
              << "]\n";
}

你需要走多远。追溯到1900年以后可能会变得非常棘手。我们不想超过1900年,如果这能用更少的代码更改解决问题的话。
Valid range is [-32767-01-01 00:00:00.000000, 32767-12-31 23:59:59.999999]