【发布时间】:2019-08-01 09:01:31
【问题描述】:
我正在尝试将 unixtime 字符串转换为 datetime,但它给出了错误的结果。我正在使用 Delphi XE2 并使用 Dateutils 的 UnixToDateTime 函数来转换 unixtime 字符串,但没有运气。我还使用了我在网上找到的不同功能,结果仍然相同。以下是必要的信息:
Unixtime 字符串值为 1552274340690
结果是“51159-08-14 04:51:30”,应该是“3/11/2019, 11:19:00 AM”。我得到的结果来自一个在线转换器。
下面使用 System.DateUtils 的 UnixToDateTime 的示例代码:
var
nUnixTime : Int64;
begin
nUnixTime := StrtoInt64(sUnixTime); //sUnixTime = 1552274340690;
Result = UnixToDateTime(nUnixTime);
下面是我在网上找到的示例代码:
const
UnixStartDate: TDateTime = 25569.0;
var
nUnixTime : Int64;
begin
nUnixTime := StrtoInt64(sUnixTime); //sUnixTime = 1552274340690;
Result := (nUnixTime / 86400) + UnixStartDate;
请帮忙,非常感谢。
【问题讨论】:
-
请显示您正在使用的实际代码,以及您如何检查它是否产生了您期望的结果。仅供参考,
1552274340690的正确结果是51159-08-14 04:51:30 UTC。2019-03-11 11:19:00 UTC将改为1552303140。这是时间戳的巨大差异。 -
@RemyLebeau 是的,抱歉,我复制了一个不同的 utc 值。已经更新了帖子。
-
UnixToDateTime()工作正常。您显然一开始就使用了错误的时间戳。您从哪里获得sUnixTime值?你怎么知道它是一个 Unix 时间戳而不是别的什么? -
@RemyLebeau 实际上它来自 api 结果并且不太清楚格式是什么,因为无法从文档中找到描述。但是根据我使用的在线转换器,它给出了正确的结果,它是从纪元时间戳毫秒或秒转换为相应的日期时间值。
-
@RemyLebeau 我做了一些事情并以某种方式给了我一个正确的结果,但需要从中获取本地日期时间。我所做的是将 nUnixTime 划分为 1000,而不是使用 div 运算符,而是仅使用正斜杠,然后进行其余的转换,并且似乎可以工作。我不确定为什么或如何,也许你可以确认一下,非常感谢。
标签: datetime delphi unix-timestamp epoch