Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi tdatetime到Java日期/日历_Java_Delphi_Date_Calendar_Tdatetime - Fatal编程技术网

Delphi tdatetime到Java日期/日历

Delphi tdatetime到Java日期/日历,java,delphi,date,calendar,tdatetime,Java,Delphi,Date,Calendar,Tdatetime,我有个问题要问你 我的Java应用程序正在与Delphi应用程序通信。 Delphi应用程序在其UI中显示一些日期值,这些值应通过文件传输到Java应用程序中 但是delphi应用程序输出的不是UTC或任何时间字符串,而是一些浮点数,我希望这些浮点数只是日期的内部tdatetime值 以下使用MM/dd/YYYY格式对此进行了说明: 用户界面:2014年7月10日->出口:41919,00 用户界面:2017年5月31日->出口:42887,00 用户界面:2015年9月30日->出口:422

我有个问题要问你

我的Java应用程序正在与Delphi应用程序通信。 Delphi应用程序在其UI中显示一些日期值,这些值应通过文件传输到Java应用程序中

但是delphi应用程序输出的不是UTC或任何时间字符串,而是一些浮点数,我希望这些浮点数只是日期的内部tdatetime值

以下使用MM/dd/YYYY格式对此进行了说明:

  • 用户界面:2014年7月10日->出口:41919,00
  • 用户界面:2017年5月31日->出口:42887,00
  • 用户界面:2015年9月30日->出口:42277,00
  • UI:08/31/2016->出口:42613,00
我知道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
Calendar c=Calendar.getInstance();
c、 集合(1899,11,30,0,0);//init delphi版本的开始时间
c、 添加(Calendar.DATE,);//加上天数
//不需要分钟,因为所有值均以.00结尾
SimpleDataFormat sdf=新的SimpleDataFormat();
System.out.println(sdf.format(c.getTime());//瞧
然而,令我惊讶的是,这并不正确

  • 导出:41919,00->Java:10/07/14 00:00(正确)
  • 导出:42887,00->Java:06/01/17 00:00(失败,+1天)
  • 导出:42277,00->Java:09/30/15 00:00(正确)
  • 导出:42613,00->Java:08/31/16 00:00(正确)
那么,我的代码片段和转换出了什么问题

实际上,我没有应用程序本身,只有UI和导出文件的屏幕截图。因此,屏幕截图和导出本身可能不完全正确的可能性很小

这也可以解释为什么

  • 用户界面:2017年5月31日->42887,00,有时为42886,00
还有其他解释吗?我认为这可能与Java和Delphie对闰年的不同处理有关,但我还没有弄明白这一点

当使用日期并进行一些ms添加时,同样的问题也会出现。转换的日期并不总是与UI中的预期值匹配

是否有人使用与上述类似的snipet将delphi tdatetime转换为java,并且没有遇到任何故障

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。我怀疑你的截图和文本文件并不完全准确

对于没有分数成分的日期时间值,您的方法是正确的