微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将Java中的转换日期转换为整数然后转换为Delphi时间

我有一个服务器设备配置,我需要使用UDP更改装备日期配置.服务器是用 Java和设备编写的,用Delphi编写.

所以,数据流是这样的:

Java服务器(Java日期) – > UDP(整数日期) – >德尔福设备(德尔福日期)

问题是,当我将日期作为整数传递时,java会计算1970年的毫秒数和德尔福数秒.我将日期传递给以下日期:today.getTime()/ 1000,但设备将此视为2008年的日期,当时我们在2012年.

我可以更改Java代码,但设备是第三方,我无法访问它的源代码.

Java和Delphi日期解析之间存在差异,允许这种差异吗?

编辑:
感谢MДΓΓБДLL,我注意到我乘以1000而不是除以它,我现在有一个更好的约会,但仍然是错误的(在2033年是某种情况,现在是在2008年).

解决方法

Unix时间戳与Java中使用的时间戳相同.另一方面,Delphi的TDateTime基于18/22/18上午12:01的开始日期(它是COM兼容性的东西),因此需要进行一些转换.这些功能会做到;我还添加了一段快速的测试代码,以显示转换在两种方式下都能正常工作.
const
  UnixStartDate = 25569.0;

function DateTimetoUnixTime(const ADateTime: TDateTime): Cardinal;
begin
  Result := Round(ADateTime - UnixStartDate) * 86400;
end;

function UnixTimetoDateTime(const UnixDate: Cardinal): TDateTime;
begin
  Result := UnixDate / 86400 + UnixStartDate;
end;

procedure TForm1.Button1Click(Sender: TObject);
var  StartDate: TDateTime;
  UnixDate: Cardinal;
begin
  StartDate := Date();
  Memo1.Lines.Add('Start Date: ' + DatetoStr(StartDate));
  UnixDate := DateTimetoUnixTime(StartDate);
  Memo1.Lines.Add('DateTimetoUnixTime = ' + IntToStr(UnixDate));
  Memo1.Lines.Add('UnixTimetoDateTime = ' + DatetoStr(UnixTimetoDateTime(UnixDate)));
end;

原文地址:https://www.jb51.cc/java/126480.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐