【问题标题】:File date returning wrong in Delphi xe5Delphi xe5中的文件日期返回错误
【发布时间】:2014-03-14 15:04:51
【问题描述】:

我正在使用一个简单的命令从文件中获取文件日期,但一直获取错误的日期。

在我的电脑上,我查看并看到日期是 14/3/2014。 但是当我运行命令时,无论我尝试什么文件,我都会得到 30/12/1999,它保持相同的返回日期。

我试过了

BackupFileDate:=FileAge(S);;
    originalfiledate:=FileAge(fileName);

BackupFileDate:=GetFileModDate(S);
originalfiledate:=GetFileModDate(Filename);

function GetFileModDate(filename : string) : TDateTime;
var
   F : TSearchRec;
begin
   FindFirst(filename,faAnyFile,F);
   Result := F.TimeStamp;

   //Result := F.Time;
   FindClose(F);
end;

两者的结果相同。 PS:BackupFileDate 和 originalfiledate 现在都定义为 TDate,我已经尝试过 TDateTime,结果相同。

我想获取上次编辑文件的日期和时间。

【问题讨论】:

  • 检查 FindFirst 的返回值。如果 FindFirst 失败,F 可能会充满垃圾。
  • @user 您不能接受 cmets。您可以自己发表评论。

标签: delphi delphi-xe5


【解决方案1】:

FileAge 返回操作系统用来记录文件修改日期和时间等信息的时间戳。

您应该使用FileDateToDateTime 函数将整数值转换为更易于管理的 TDateTime 格式:

FileDateToDateTime(FileAge(fileName));

注意:

function FileAge(const FileName: string): Integer; overload;

已弃用。 FileAge还有另一个版本

function FileAge(const FileName: string; out FileDateTime: TDateTime; FollowLink: Boolean = True): Boolean;

在 FileDateTime 输出参数中返回 FileName 的时间戳。

FileAge(filename, timeDate);

编辑

根据数据的用途,convert from UTC to local time 可能(非常)重要。

【讨论】:

  • 您还没有涵盖第二个摘录,它工作正常。或时区。最好希望提问者不在格林威治标准时间!
  • 当然你是对的,必须考虑时区!
【解决方案2】:

tl;dr 使用TFile.GetLastWriteTimeTFile.GetLastWriteTimeUtc


您的第一次尝试失败,因为FileAge 返回 DOS 日期时间值。这与TDateTime 完全不同。

您的第二段代码基本上可以工作,以您忽略检查错误的事实为模。该错误的可能解释是您传递了无效的文件名。当调用FindFirst 失败时,返回的搜索记录是未定义的。

TSearchRecTimeStamp 属性将文件时间从UTC 转换为本地时间,然后从文件时间转换为TDateTime

您希望像这样修复缺少错误处理的问题:

function GetFileModDate(const FileName: string): TDateTime;
var
  F: TSearchRec;
begin
  if FindFirst(filename, faAnyFile, F)<>0 then
    raise SomeException.Create('...');
  Result := F.TimeStamp;
  FindClose(F);
end;

您应该清楚,这会在当地时间返回 TDateTime

也就是说,我将使用IOUtils 以独立于平台的方式进行操作。具体是TFile.GetLastWriteTimeTFile.GetLastWriteTimeUtc,具体取决于您要如何处理时区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2013-11-08
    • 2013-09-04
    相关资源
    最近更新 更多