1970 年 c++ 之前的日期处理
Date handling before 1970 c++
我想知道在这里做的最好的事情是什么。我得到了一个作业,我必须更新一个使用 Ctime 的 Date 类。
该类现在必须工作到 1970 年之前的日期。我环顾四周,没有找到太多...
所以我想我的问题是实现这一目标的最佳方法是什么?
日期范围从 [1970-2037] 到 [1900-2037]
假设你的意思是MFC
CTime
,如果你启用OLE
你可以使用COleDateTime
作为直接替代品。 根据文档,它支持"从 100 年 1 月 1 日到 9999 年 12 月 31 日"的日期。
您可以将日期存储为自 1970-01-01 或任何其他纪元以来的有符号整数天数。负日期是 1970 年之前的日期。
或者您可以使用Boost.Date_Time库。
一个日期类,它将内部std::tm
日期时间对象和自 1970 年 1 月 1 日(或之前)以来(或之前)的总秒数存储为time_t
。tm
的成员都是int
的,time_t
到处都应该是64位(我希望),所以理论上应该涵盖你可以考虑的所有时间。
在类的构造函数中,您需要计算这些总秒数,而似乎唯一可以做到这一点的标准库函数是 mktime
。不幸的是,这个仅适用于 1970 年 1 月 1 日之后的日期。
一种可能的解决方法...为这一年添加一个非常大的数字,并在内部使用它。
#include <ctime>
#include <iostream>
class CustomDateTime {
const int MKTIME_DELTA = 100000;
std::tm _datetime;
std::time_t _total_seconds;
public:
CustomDateTime(int year, int mon, int day, int hour, int min, int sec) {
_datetime.tm_year = year - 1900 + MKTIME_DELTA;
_datetime.tm_mon = mon - 1;
// copy day, hour, min, sec
_total_seconds = std::mktime(&_datetime);
}
bool operator==(const CustomDateTime& rhs) {
return _total_seconds == rhs._total_seconds;
}
void print() {
std::cout << _datetime.tm_year + 1900 - MKTIME_DELTA << ':'
<< _datetime.tm_mon + 1 << _datetime.tm_mday << 'n';
}
};
这应该涵盖1970 - MKTIME_DELTA = -98030
到遥远未来之间的所有年份。
相关文章:
- 警告处理为错误这里有什么问题
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 查询SQLite数据库中的日期
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 基于多个条件处理地图中的所有元素
- 如何用数字处理log(0)
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- 错误处理.将系统错误代码映射到泛型
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何读取和处理格式化的日期,如 01/11/1998、星期日(10000 个输入)C++
- 在 CLI 中转换日期时间time_t错误处理C++是否安全
- 1970 年 c++ 之前的日期处理
- 如何从日期中减去月份并能够处理溢出
- 是否有一个库(跨平台)来处理操作系统日期
- C++提升库 - 正确处理日期序列内存分配错误
- 库用于处理历史(大)日期和时间(例如,公元前11,043年)