2012-07-18 97 views
0

我有一个输入.txt文件,其中包含一个日期。日期格式为DDMONYY,如08年8月9日或16日的05年。我需要比较这个日期和文件的创建日期,并且看哪个更早。将字符串中的日期转换为FILETIME

FILETIME看起来是合适的形式,尤其是因为有一个CompareFileTime函数。但是,我有问题将日期转换为文件时间。

我可以从文件中提取日期并将其转换为数字(第1-31天,第1-12天,第1900-20天),所以我不需要帮助,但可随时对其进行评论无论如何。

真正的问题是我无法弄清楚如何将这些值转换为FILETIME格式。现在我有三个不同的字符串(或int,如果这有助于更多)一个日,月和年。如果你能帮助我从字符串跳转到FILETIME,那会很棒。或者,如果我在研究期间错过了一个完全更好的方法,请随时提出建议。

如果你愿意,我可以发布我有的,但我不认为它会帮助,因为它只是得到字符串/ int的。


如果它使任何更清晰,数值我在这一点上有我的变量,2002年5月3日,将沿

string day = "03"; 
string month ="5"; 
string year = "2002; 
int dayint = 3; 
int monthint = 5; 
int yearint = 2002; 

线的东西,我需要一种方法将其转换为FILETIME

非常感谢。


编辑:

我不知道我怎么会填补SYSTEMTIME结构,甚至是如何做到这一点的不同的时间系统。所以我想这更多是我的问题。

我应该也提到我只需要几天的准确性。小时和更小的东西都不是我真正关心的。


EDIT2:

我不能试图给SYSTEMTIME INT值,因为这似乎工作。但是,当我尝试将该系统时间转换为文件时间时,我遇到了问题。它声明“错误:从”SYSTEMTIME“到”const SYSTEMTIME *“的合适对话不存在”。我不知道如何解决这个问题,因为如果我将systime变量定义为const SYSTEMTIME,我无法为其分配值。

这里的相关代码,如果它可以帮助

SYSTEMTIME systime; 
LPFILETIME ftime1; 
LPFILETIME ftime2; 
int dayint=6; 
int monthint=12; 
int yearint=1989; 

systime.wDay = dayint; 
systime.wMonth = monthint; 
//and so on for year, hour, etc. 
SystemTimeToFileTime(systime,ftime1);  //This is where the aforementioned error occurs 
GetFileTime(filename, NULL, NULL, ftime2); //I'm also not sure about this line... feel free to critique it. I'm only interested in the last written time so I put NULL for the other times... When I check the values for this (in SYSTEMTIME) it only returns 52428, so I don't think this line is working correctly... 
CompareFileTime(ftime1,ftime2); 

当然,对于日,月,年值在实际代码中不硬编码。


EDIT3:

我有一个坏的手柄....

我要去尝试解决这个问题.... 感谢您的帮助本·福格特 如果我不能得到它,我想我一定会回来的

+0

如果你不知道如何在一个结构中分配变量,让自己一本好的C++书:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – 2012-07-18 03:45:38

+0

你几乎在那里,但这些函数需要'SYSTEMTIME'或'FILETIME'结构的地址,所以说'SystemTimeToFileTime(&systime,&ftime1)'等等('&'操作符获取变量的地址。地址被称为指针。)您还需要设置'SYSTEMTIME'的其他字段,例如小时,分钟和秒。如果你不在乎,你可以使用午夜。你应该检查这些函数的返回值,以确保它们成功。 – 2012-07-18 12:46:44

+0

谢谢,这正是我需要的。我错过了时代的前沿。所以如果我理解正确,SystemTimeToFileTime函数需要变量的地址,而不是实际的变量? 此外,我现在有问题使用'GetFileTime'。它实际上不会返回'FILETIME',它只是给我每个字段的值52428。 我正在使用下面的'GetFileTime(filename,NULL,NULL,&ftime2);'那里有什么问题吗? – user1533323 2012-07-18 13:28:39

回答

4

您可以在SYSTEMTIME结构填写,然后调用SystemTimeToFileTime

您可能需要使用LocalFileTimeToFileTime之后,取决于您是否要以UTC或本地时间指定小时。

+0

我该如何填写'SYSTEMTIME'结构?我无法弄清楚如何做到这一点。我想我应该澄清一点。 我编辑的帖子,所以希望它会更清晰。感谢你的帮助,但我认为你是对的。 – user1533323 2012-07-18 02:25:17

+2

SYSTEMTIME的字段应该是不言自明的,但MSDN文档将其拼出以防万一。如果您填写时遇到问题,您需要更详细地解释您遇到问题的部分。 – 2012-07-18 02:57:14

+0

我编辑了原始文章并添加了一些更多信息,希望它是您正在寻找的所有内容。 – user1533323 2012-07-18 11:52:36