C++ DateTime类

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++ 类吗?

  1. 将我的DateTime类转换为其DateTime类
  2. 他们的班级应提供<,>,<=,> =运算符进行比较

如果可以提供一个很好的具体例子.请注意,我需要比较毫秒.

我在考虑BoostQt.首选提升.

Fre*_*son 19

请参阅Boost Date Time库

而你的课看起来非常像struct tm

编辑:你是对的,struct tm不支持毫秒精度.

看看Boost示例.这有帮助吗?


Gun*_*iez 8

您可能想要从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)

相反的方式是相似的;-)


pau*_*doo 5

我不知道有什么不妥.但是我会考虑重写你的日期类来保存一个64位的整数,这个整数描述了自传统时代以来的毫秒(1970年是吗?).然后你可以自由地除以1000并使用普通的CRT函数进行格式化作为字符串,另外你可以取模值1000来获得毫秒部分.

然后比较运算符变得容易..


Rog*_*son 5

我放弃了在公历时代存储日期。我将日期存储为32位整数(有点像朱利安日期)。因此,日期由(年* 1000)+ DOY(DOY是一年中的某天)组成。即-2009001是2009年1月1日-2009365是2009年12月31日

我的日期类当然提供了获取年,月和日,相加,相减,递增和递减,比较,获取日期之间的天数等方法。

对于日期和时间,我使用64位浮点数,其中实数的整数部分与上述整数(Julian类似)日期相同,并且小数表示时间(以天为单位)。

  • 2009001.04166666666〜是2009年1月1日上午1:00
  • 2009001.06249999999〜是2009年1月1日上午1:30
  • 2009001.95833333333〜是2009年1月1日下午11:00

如果只需要分钟精度,则可以使用32位浮点数作为日期和时间,但不能足够准确地存储秒和毫秒。

以这种方式存储日期(和时间)的优点是:

  • 与问题中的DateTime类使用的28bytes(假定32bit整数)相比,您只需要8bytes即可表示数据和时间。

  • 与以纪元秒存储的日期相比,查看数字(例如在调试器中)时,您可以或多或少地从数字中识别年份,年份和一天中的大致时间(以获取小时数) ,分钟,午夜后的第二秒分别分别调为24、1440、86400)。

  • 比较日期是微不足道的,只需将数字进行比较即可(单个CPU操作与示例日期时间示例所用的几个操作相比)。

  • 较少的比较操作可以执行日期算术。

此方法(对于时间)的缺点是精度略有下降(这实际上是一个静默点),并且当转换为小时,分和秒的整数值时,必须执行一些简单的舍入操作才能获得良好的整数值。