在C++中比较日期

问题描述:

我有一个文件'date.txt',它有日期。像, 周一10月13日9时37分08秒2009年在C++中比较日期

现在我想比较这最新与系统日期。我如何在C++中比较日期?

我用这个代码从文件内容“date.txt”

string date; 
    while (inDateFile >>date) //inDateFile is an ifstream object 
      cout<<date<<endl; 

而这种代码来获得系统日期,

time_t timer; 
    struct tm *tblock; 
    timer = time(NULL); 
    tblock = localtime(&timer); 
    string str = asctime(tblock); 

现在,我怎么这两个日期比较。?

+0

这里没有足够的数据来回答问题。第一个代码段中的'date'的类型是什么? – Omnifarious 2009-10-12 05:00:29

+0

date是一个字符串数据类型。我只是阅读字符串中的文件内容并显示它们 – SyncMaster 2009-10-12 05:12:47

+0

这不是一个答案本身,只是一个评论:该地区将如何影响您阅读的文本或在这里是不相关的?在我看来,这整个要求有点脆弱。 – 2009-10-12 07:35:57

解析值,使用std::mktime函数得到time_t并且现在使用std::difftime来获得差异。

http://datetime.perl.org/index.cgi?FAQBasicUsage

你将有你比较之前,你的约会从TXT文件转换成TM结构法。

+0

@iamiPhone,我认为解决方案预计在C++ – Satbir 2009-10-12 05:05:10

+0

雅。我如何在C++中做? – SyncMaster 2009-10-12 05:14:41

日期字符串转换为数值时间值(32或64位),又名,使时间,然后比较哪个时间(NULL)返回的系统时间。

+0

man strptime/mktime – Test 2009-10-12 05:21:21

+0

是的,不要打扰将当前日期转换为字符串。它不会给你太多。除了将data.txt信息存储为“时间”之外,还会使后面的操作变得更加容易。 – baash05 2009-10-12 05:32:41

,如果你只想分析你的文件,你需要分割字符串中的RESP值的字符串,你也可能需要检查哪些国家地区考虑到这一点,因为不同的地区有不同的顺序/月名称等等。您可以按照哪种顺序配置不同的记号出现在文本中。

解决这个问题的一种方法是,例如取出字符串'date',然后使用boost中的模板Tokenizer(或者如果你想这样做,C方法调用strtok()函数)来分割字符串根据分隔符转换为子字符串。之后,很容易转换输入。

另一个也许更简单的方法是,当你从文件中读取的读取整个字符串,而不是读了上面的分隔符例如','然后再读 - 你可以使用inDateFile.getline()。

我们使用升压date_time用于读取日期字符串,然后比较它们。它在我们的经验中效果很好。