【问题标题】:Delphi SetCreationTime adds an hour if date is in different daylight saving time如果日期在不同的夏令时,Delphi SetCreationTime 会增加一个小时
【发布时间】:2022-01-01 22:52:54
【问题描述】:

今天是 11 月 (DST)。我将文件日期时间设置为:

TFile.SetCreationTime(FilePath, ADateTime);
  1. 如果我将日期时间设置为:“2021-11-11 02:27:00”,则在 Windows 资源管理器中读取的内容与设置相同。

  2. 如果我将日期时间设置为:“2021-05-14 02:27:00”,那么日期是可以的,但在 Windows 资源管理器中读取的小时数是 03:27。

如何独立于 DST 将小时设置为 02:27:00?

【问题讨论】:

  • NTFS 不就是这样处理的吗?我敢打赌,您会发现关于这个主题还有无数其他问题。
  • 您使用的是什么版本的Delphi?我无法在 10.4 中重现它。 dt := EncodeDateTime(2021, 05,14,02,27,0,0); TFile.SetCreationTime('C:\test\test.txt', dt); Result 是一个在 Windows 中显示的文件,其时间戳为 5 月 14 日 2:27:00,符合预期。
  • @J...你激活并查看“创建时间”列

标签: datetime delphi dst


【解决方案1】:

The documentation on TFile.SetCreationTime() 不是很好。但是,由于method TFile.SetCreationTimeUtc() exists 也很可能将TDateTime 解释为本地时间(操作帐户设置中当前选择的时区),而后者将其解释为系统时间(UTC = GMT = 时区 0000) .

长话短说:避免麻烦并在 UTC 时间运行,这也不知道夏令时。例子:

【讨论】:

  • 我曾尝试使用 UTC 函数版本 (TFile.SetCreationTimeUtc),但结果为 4:27:00(我设置为 2:27:00)。至少 Windows 资源管理器是这么说的。
  • 您还没有提到您的操作系统帐户中设置的时区。如果它是正确的(即选择错误的时区只是为了适应夏季/冬季偏移)。
  • 我在 Windows 10 中设置的时区是:"(UTC +01:00) Sarajevo...Warsaw..." 你不认为应该有设置小时而不带 TZ 的功能吗帐号?
  • 02:27 设置为 UTC 时间将显示为 03:27,时区为 +0100,并且当 DST 生效时(正如您在问题中描述的那样,尽管我对 11 月有疑问是 DST)然后再增加一个小时,因此 Windows 将显示时间04:27。这就是发生在你身上的事情。
猜你喜欢
  • 1970-01-01
  • 2015-03-10
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
相关资源
最近更新 更多