用c++计算时间

time in C++ calculation

本文关键字:时间 计算 c++      更新时间:2023-10-16

我有一个包含记录的文本文件。我需要决定时间(这是记录结构的一部分)是否在2倍(存储在字符串中)之间,表示较低和较高的范围。在文件中,时间以145540123456表示,这意味着14是小时,55分,40秒,123456微秒精确。

我决定它是否在范围内的上限和下限时间,我以相同格式的字符串获得它,例如"093000000000"。我如何进行计算,我需要用time_t和时间库来做吗?

注意:我不能使用Boost

您指定的格式有一个简单的优点,即按字母数字排序这些时间字符串将使它们保持正确的顺序。

因此,使用strcmp(如果使用以空结尾的char *缓冲区,则使用简单的C函数)或std::string的比较运算符可以使您轻松地确定某个时间字符串是否属于一个区间。

这些方法可以导致很少的计算,例如,如果您比较的字符串的第一个字符不同,因为标准函数应该足够聪明,在确定结果后立即停止比较字符串。

如果您不减去这些数字,您应该能够将它们作为数字进行比较。代表更长的时间的数字也总是更大。这是因为最重的单位在左端(小时),最轻的单位在右端(微秒),这与正常数字使用的系统相同。

请将其转换为unsigned int64或其他类型,而不仅仅是int,因为它会被145540123456这样的数字溢出

在本例中,只需将其转换为数字并进行比较。您的格式将最有效的数字放在左边。您的最高可能数是235,959,999,999,它不适合unsigned long。

一种简单的方法是在HHMMSS和mmmmmm处分割它——如果第一个数字相等,比较第二个。

在c++中处理日期/时间计算的最佳方法(c)是Boost。Date_Time图书馆。

不幸的是,您的字符串没有任何标准格式。因此,您必须自己解析它们,并将其用作posix时间持续时间的输入。

如果你不能使用任何库,你可以简单地定义一个结构体与小时,分钟,秒和微秒成员和operator<。然后简单地将输入解析到这些结构体中,并对它们进行比较。

另一个选项是以微秒为单位转换每个持续时间。