我有一个包含记录的文本文件。我需要确定时间(它是记录结构的一部分)是否在2次(存储在字符串中)之间,表示较低和较高的范围。 在文件中,时间以145540123456表示,这意味着14是小时,55分钟,40秒,123456 - 精确的微秒。
我可以判断它是否在范围内的上下时间,我将其作为字符串以相同的格式获取,例如“093000000000”。如何进行计算,是否需要使用time_t和时间库进行计算?
注意:我不能使用Boost。
答案 0 :(得分:6)
您指定的格式具有以下简单优势:按字母顺序对这些时间字符串进行排序将使它们保持正确的顺序。
因此,使用strcmp
(简单C函数,如果使用以null结尾的char *缓冲区)或std::string
的比较运算符可以让您轻松确定某个时间字符串是否属于某个时间间隔
这些方法可能导致很少的计算,例如,如果您比较的字符串的第一个字符不同,因为标准函数应足够智能,以便在确定结果后立即停止比较字符串。 / p>
答案 1 :(得分:1)
如果您没有减去这些数字,您应该只能将它们作为数字进行比较。代表更长时间的那个也总是更大的数字。这是因为你有左边最重的单位(小时)和右边最重的单位(微秒),这是正常数字使用的系统。
只需将其转换为无符号的int64或其他东西,而不仅仅是int,因为它会溢出一个像145540123456这样的数字。
答案 2 :(得分:1)
在这种情况下,只需将其转换为数字并进行比较即可。您的格式将最重要的数字放在左侧。您的最高可能数为235,959,999,999
,不适合无符号长。
一种简单的方法是将它拆分为HHMMSS和mmmmmm - 如果第一个数字相等,则比较第二个。
答案 3 :(得分:0)
在C ++中处理日期/时间计算的最佳方法是({3}}库。
不幸的是,您的字符串不是任何标准格式。因此,您必须自己解析它们并将其用作posix持续时间的输入。
如果您不能使用任何库,您只需定义一个包含小时,分钟,秒和微秒成员和operator<
的结构。
然后简单地将输入解析为那些结构并进行比较。
另一种选择是以微秒为单位转换每个持续时间。那时的比较就变得微不足道了。