我有一个问题,德尔福 - 在那里破解。
我的Java应用程序正在与Delphi应用程序通信。 Delphi应用程序在其UI中显示一些日期值,这些日期值应通过文件传输到Java应用程序中。
但是,而不是UTC或任何时间字符串,delphi应用程序导出一些浮点数,我希望它们只是日期的内部tdatetime值。
以下使用MM / dd / YYYY格式说明了这一点:
我知道,Delphi tdatetime值使用30/12/1899作为参考。
因此我希望以下代码snipet能够做到这一点:
Calendar c = Calendar.getInstance();
c.set(1899, 11, 30, 0, 0);// init delphi version of start of time
c.add(Calendar.DATE, <FloatingPoint>); // add in the days
// minutes not required as all values end with .00
SimpleDateFormat sdf = new SimpleDateFormat();
System.out.println(sdf.format(c.getTime())); // voila
但令我惊讶的是,这是不正确的
那么我的代码段和转换有什么不对?
实际上我没有应用程序本身,只是UI的屏幕截图和导出的文件。因此,屏幕截图和导出本身可能并不完全正确。
这也可以解释为什么
还有其他解释吗?我认为它可能与Java和Delphie中闰年的不同处理方式有关,但我还是无法解决这个问题。
使用Date并执行一些ms-addition时会出现相同的问题。转换后的日期不会始终与用户界面中的预期值匹配。
任何人都使用与上面类似的snipet将delphi tdatetime转换为java并且没有遇到任何故障?
答案 0 :(得分:2)
program Project1;
{$APPTYPE CONSOLE}
uses
DateUtils;
var
t : TDateTime;
d : double;
begin
t := EncodeDateTime(2017,05,31,0,0,0,0);
d := t;
WriteLn(d);
ReadLn;
end.
此输出值42886,而不是源数据建议的42887。我怀疑你的截图和文本文件并不完全准确。
对于没有小数分量的日期时间值,您的方法是正确的。