将字符串中的日期转换为FILETIME

时间:2012-07-18 01:21:36

标签: c++ winapi

我有一个imput .txt文件,其中包含一个日期。日期的格式为DDMONYY,如08JUN98或16NOV05。我需要将此日期与文件的创建日期进行比较,并查看哪个更早。

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:

我手柄不好......

我打算尝试解决这个问题.... 感谢你的帮助Ben Voigt 如果我不能得到它,我想我会回来的

1 个答案:

答案 0 :(得分:4)

您可以填写SYSTEMTIME结构,然后拨打SystemTimeToFileTime

您可能希望之后使用LocalFileTimeToFileTime,具体取决于您是要以UTC还是当地时间指定小时数。