siv*_*udh 9 c++ comparison datetime
我将自己的C++ DateTime类定义为:
class DateTime
{
public:
int year;
int month;
int day;
int hour;
int min;
int sec;
int millisec;
};
Run Code Online (Sandbox Code Playgroud)
我有2个DateTime我需要比较,看看哪一个比另一个更大(更新).
DateTime我可以使用任何免费的C++ 类吗?
如果可以提供一个很好的具体例子.请注意,我需要比较毫秒.
我在考虑Boost或Qt.首选提升.
您可能想要从Qt 查看QDateTime,它具有所需的运算符和ms精度.
你班上的转换可以通过
class DateTime
{
public:
int year;
int month;
int day;
int hour;
int min;
int sec;
int millisec;
QDateTime toQDateTime() {
return QDateTime(QDate(year, month, day), QTime(hour, min, sec, millisec));
}
};
Run Code Online (Sandbox Code Playgroud)
相反的方式是相似的;-)
我不知道有什么不妥.但是我会考虑重写你的日期类来保存一个64位的整数,这个整数描述了自传统时代以来的毫秒(1970年是吗?).然后你可以自由地除以1000并使用普通的CRT函数进行格式化作为字符串,另外你可以取模值1000来获得毫秒部分.
然后比较运算符变得容易..
我放弃了在公历时代存储日期。我将日期存储为32位整数(有点像朱利安日期)。因此,日期由(年* 1000)+ DOY(DOY是一年中的某天)组成。即-2009001是2009年1月1日-2009365是2009年12月31日
我的日期类当然提供了获取年,月和日,相加,相减,递增和递减,比较,获取日期之间的天数等方法。
对于日期和时间,我使用64位浮点数,其中实数的整数部分与上述整数(Julian类似)日期相同,并且小数表示时间(以天为单位)。
即
如果只需要分钟精度,则可以使用32位浮点数作为日期和时间,但不能足够准确地存储秒和毫秒。
以这种方式存储日期(和时间)的优点是:
与问题中的DateTime类使用的28bytes(假定32bit整数)相比,您只需要8bytes即可表示数据和时间。
与以纪元秒存储的日期相比,查看数字(例如在调试器中)时,您可以或多或少地从数字中识别年份,年份和一天中的大致时间(以获取小时数) ,分钟,午夜后的第二秒分别分别调为24、1440、86400)。
比较日期是微不足道的,只需将数字进行比较即可(单个CPU操作与示例日期时间示例所用的几个操作相比)。
较少的比较操作可以执行日期算术。
此方法(对于时间)的缺点是精度略有下降(这实际上是一个静默点),并且当转换为小时,分和秒的整数值时,必须执行一些简单的舍入操作才能获得良好的整数值。