我目前正在使用下面的指导原则通过Delphi http://www.latiumsoftware.com/en/delphi/00007.php获取文件的"LastAccessTime“
使用FindNext访问TSearchRec对象,我可以从该对象访问类型为TFileTime的ftLastWriteTime
当将其转换为TDateTime对象(使用上面的源),然后输出DateTimeToString时,我得到了日期和时间,但小时似乎是文件ftLastWriteTime小时值中两位数字的总和。
也就是说,我得到的不是2009/09/03 13:45,而是2009/09/03 04:45,或者是2009/09/03 17:45,而不是2009/09/03 08:45
欢迎提出任何意见,提前谢谢!
发布于 2009-07-03 06:50:26
“如往常一样”;-)我将指向包含函数DSiGetFileTimes的DSiWin32,该函数返回创建时间、上次访问时间和上次修改时间。
function DSiFileTimeToDateTime(fileTime: TFileTime; var dateTime: TDateTime): boolean;
var
sysTime: TSystemTime;
begin
Result := FileTimeToSystemTime(fileTime, sysTime);
if Result then
dateTime := SystemTimeToDateTime(sysTime);
end; { DSiFileTimeToDateTime }
function DSiGetFileTimes(const fileName: string; var creationTime, lastAccessTime,
lastModificationTime: TDateTime): boolean;
var
fileHandle : cardinal;
fsCreationTime : TFileTime;
fsLastAccessTime : TFileTime;
fsLastModificationTime: TFileTime;
begin
Result := false;
fileHandle := CreateFile(PChar(fileName), GENERIC_READ, FILE_SHARE_READ, nil,
OPEN_EXISTING, 0, 0);
if fileHandle <> INVALID_HANDLE_VALUE then try
Result :=
GetFileTime(fileHandle, @fsCreationTime, @fsLastAccessTime,
@fsLastModificationTime) and
DSiFileTimeToDateTime(fsCreationTime, creationTime) and
DSiFileTimeToDateTime(fsLastAccessTime, lastAccessTime) and
DSiFileTimeToDateTime(fsLastModificationTime, lastModificationTime);
finally
CloseHandle(fileHandle);
end;
end; { DSiGetFileTimes }发布于 2009-07-03 03:05:52
通常,在我发布第一篇文章20分钟后,我就解决了自己的问题。
链接代码的作者avbove有相同代码的两个版本,第二个版本发布在这里http://www.latiumsoftware.com/en/delphi/00051.php
问题解决了!-我认为DOS库对Win32时间戳的解释是不正确的,并延续到了后面的代码中。也许不是?如果时间允许,我会进一步调查。
发布于 2009-07-03 04:19:51
时间戳采用UTC,而不是本地时间。
https://stackoverflow.com/questions/1077579
复制相似问题