You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi调用TFile.SetCreationTime跨夏令时加1小时如何不受DST影响

问题原因

你调用的TFile.SetCreationTime默认接收本地时间参数,系统写入文件时实际存储的是UTC时间,Windows资源管理器显示时会再将UTC时间按当前系统的时区与夏令时规则转换为本地时间,跨夏令时时段的时间就会出现1小时的偏移。

解决方法

要完全规避夏令时影响,你需要将目标时间转换为不带夏令时偏移的UTC时间,调用UTC专属的文件时间写入方法即可:

C# 实现代码

// 定义目标固定时间
DateTime targetLocalTime = new DateTime(2021, 5, 14, 2, 27, 0, DateTimeKind.Unspecified);
TimeZoneInfo localZone = TimeZoneInfo.Local;
// 转换UTC时强制忽略夏令时调整
DateTime targetUtcTime = TimeZoneInfo.ConvertTimeToUtc(targetLocalTime, localZone, TimeZoneInfoOptions.NoDaylightSaving);
// 写入UTC时间
TFile.SetCreationTimeUtc(FilePath, targetUtcTime);

Delphi 实现代码

var
  targetLocalTime: TDateTime;
  targetUtcTime: TDateTime;
begin
  targetLocalTime := EncodeDateTime(2021, 5, 14, 2, 27, 0, 0);
  // 第二个参数设为False,转换UTC时不应用夏令时偏移
  targetUtcTime := TTimeZone.Local.ToUniversalTime(targetLocalTime, False);
  TFile.SetCreationTimeUtc(FilePath, targetUtcTime);
end;
原理说明

文件系统底层统一存储UTC时间,你提前将目标本地时间转换为忽略夏令时的UTC值写入,后续系统读取转换为本地时间时,就会固定显示你指定的02:27:00,不受当前系统是否处于夏令时时段影响。

内容的提问来源于stack exchange,提问作者m227

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:45:03