【发布时间】:2019-07-28 18:04:14
【问题描述】:
使用 GitHub API,时间戳以 UTC 格式返回。我正在使用以下内容将这些转换为 Delphi TDateTime...
with TXSDateTime.Create do
try
XSToNative('2019-07-27T19:33:02Z');
Result:= AsDateTime;
finally
Free;
end;
我不记得我在哪里找到了那个函数。
值2019-07-27T19:33:02Z 直接来自特定存储库的“pushed_at”字段(最后推送)上的 GitHub API。使用上面的函数转换后,我得到(格式化为字符串):
2019-07-27 11:33:02
现在我采用这个值并尝试将其转换为本地时间。我的当地时间是美国东部时间,我知道我昨天下午 3:33 上次推送的特定存储库。我直接在 GitHub 的网站上确认了这一点。
我使用了the top two answers on this question 中的两种方法。特别是函数LocalDateTimeFromUTCDateTime 和UnivDateTime2LocalDateTime 但是,结果都是倒退的。两种方法都不是增加 4 小时,而是减去 4 小时。
所以我从两者得到的结果是
2019-07-27 07:33:02
我知道我没有在早上 7:33 做那个推送。我还没醒。
事实上,如果我使用了错误函数DateTime2UnivDateTime()那么我实际上得到了正确的结果。
我在这里做错了什么,如何获得当地时间的正确结果?
我几乎不了解时区背后的科学。
编辑
看起来第一个函数导致时移加倍,所以我没有意识到它已经在尝试转换为本地时间。但不是减去 4 小时,而是减去了 8 小时。所以我被甩了,我想我仍然需要将它转换为当地时间。但为什么它会移动两次?
【问题讨论】:
-
System.DateUtils 中有一个 ISO8601ToDate 方法
标签: datetime delphi github-api utc