Delphi:DateTime的UnixTime字符串给出了意外的结果

Delphi:DateTime的UnixTime字符串给出了意外的结果,datetime,delphi,unix-timestamp,epoch,Datetime,Delphi,Unix Timestamp,Epoch,我试图将unixtime字符串转换为datetime,但它给出了错误的结果。我使用Delphi XE2并使用Dateutils的UnixToDateTime函数来转换unixtime字符串,但没有运气。我还使用了一个不同的功能,我发现在网络上仍然有相同的结果。以下是必要的信息: Unixtime字符串值为1552274340690 结果是“51159-08-1404:51:30”,应该是“2019年3月11日,上午11:19:00”。我得到的结果来自一个在线转换器 下面是使用System.Dat

我试图将unixtime字符串转换为datetime,但它给出了错误的结果。我使用Delphi XE2并使用Dateutils的UnixToDateTime函数来转换unixtime字符串,但没有运气。我还使用了一个不同的功能,我发现在网络上仍然有相同的结果。以下是必要的信息:

Unixtime字符串值为1552274340690
结果是“51159-08-1404:51:30”,应该是“2019年3月11日,上午11:19:00”。我得到的结果来自一个在线转换器

下面是使用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; 
请帮忙,非常感谢。

小测试

Caption:=DateTimeToStr(UnixToDateTime(SecondsBetween(StrToDate('01.01.1970'), Now)));` 
给出正确的当前时间

请注意,UnixTime现在只需

1552307060
1552274340690
而您的值(第二行)以毫秒为单位


因此,您可以将其除以1000,得到
UnixToDateTime
function

可接受的值。请显示您正在使用的实际代码,以及您如何检查它是否产生预期的结果。仅供参考,
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运算符,而是只使用正斜杠,然后执行其余的转换,并且似乎可以工作。我不知道为什么或者如何,也许你可以证实,非常感谢。是的,已经做了同样的事情,但仍然是正确的答案,谢谢@MBoYep,对不起,页面被打开了很长时间,我错过了所有最后的评论(雷米的唯一评论,现在被删除)