Delphi:当本地DST处于活动状态时如何获取UTC时间

bgtovc5b  于 2022-10-16  发布在  其他
关注(0)|答案(1)|浏览(187)

我在StackOverflow上的第一个问题。
Delphi Embarcadero 10.3环境。我想进入协调世界时的时间。无论DST在我所在时区的本地计算机上是否处于活动状态,我都无法获得正确的UTC日期时间。当夏令时处于活动状态时,它会正确地报告UTC,但当我在11/6/22 02:00 AM之后测试*时,结果UTC输出时间早了1小时。
一个简单的函数应该根据文件给我UTC作为输出,并自动调整为当地的DST偏移和时区。以下是其功能:

function UTCNow: TDateTime;
var
   UTCnowDateTime: TDateTime;
begin
   UTCnowDateTime := TTimezone.Local.ToUniversalTime(Now, True);
   Result := UTCnowDateTime;
end;

我通过将当地时间设置为2022年11月6日凌晨1:59:00进行了测试
我调用上面的UTCNow函数,得到2022年11月6日和UTC时间5:59:06 AM然后,我等待时间到达凌晨2点,我的本地计算机调整到DST结束,并将当地时间设置为01:00。
我再次调用UTCNow函数,得到2022年11月6日和UTC时间5:00:14 AM休息一小时!应该是早上6:00:14
(注意:我使用DateTime.UtcNow运行了一个VB.net测试,它在DST更改期间正常工作,但这对我没有帮助...)
有什么提示吗?

piwo6bdm

piwo6bdm1#

对于Windows,您可以调用GetSystemTime,它以UTC为单位获取时间。只需将其从Windows系统时间转换为TDateTime即可。

function UTCNow: TDateTime;
var
   ASystemTime: TSystemTime;
   UTCnowDateTime: TDateTime;
begin
   GetSystemTime(ASystemTime);
   UTCnowDateTime :=  SystemTimeToDateTime(ASystemTime);
   Result := UTCnowDateTime;
end;

相关问题