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

Convert a date in a string to FILETIME

本文关键字:转换 FILETIME 日期 字符串      更新时间:2023-10-16

我有一个imput.txt文件,其中包含一个日期。日期的格式为DDMONYY,如1998年6月8日或2005年11月16日。我需要将此日期与文件的创建日期进行比较,看看哪个日期更快。

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结构,甚至不确定如何为不同的时间系统填充。所以我想这更多的是我的问题。

我还应该提到,我只需要准确的天数。小时和任何较小的事情对我来说都不重要。


第2版:

我一定没有尝试给SYSTEMTIME提供int值,因为这似乎有效。然而,当我试图将系统时间转换为文件时间时,我遇到了问题。它表示"错误:不存在从"SYSTEMTIME"到"const SYSTEMTIME*"的合适转换"。我不知道如何解决这个问题,因为如果我将系统时间变量定义为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);

当然,日、月、年的值在实际代码中没有硬编码。


第3版:

我的手不好。。。。

我会设法解决这个问题。。。。感谢你的帮助Ben Voigt如果我拿不到,我想我会回到

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

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