【问题标题】:Delphi tdatetime to Java Date/CalenderDelphi tdatetime 到 Java 日期/日历
【发布时间】:2015-05-07 21:10:49
【问题描述】:

我有一个问题要问你 Delphi 破解那里。

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

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

下面使用 MM/dd/YYYY 格式说明这一点:

  • 用户界面:10/07/2014 -> 导出:41919,00
  • 用户界面:05/31/2017 -> 导出:42887,00
  • 用户界面:09/30/2015 -> 导出:42277,00
  • 用户界面:08/31/2016 -> 导出:42613,00

我知道,Delphi tdatetime 值使用 30/12/1899 作为参考。

因此,我希望以下代码片段可以解决问题:

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

但令我惊讶的是,这是不正确的

  • 导出: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(正确)

那么我的代码 sn-p 和转换有什么问题?

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

这也可以解释,为什么

  • 用户界面:05/31/2017 -> 42887,00,有时是 42886,00

还有其他解释吗?我认为这可能与 Java 和 Delphi 中对闰年的不同处理有关,但我一直无法弄清楚。

使用 Date 并改为执行一些 ms-additions 时会出现同样的问题。转换后的日期并不总是与 UI 中的预期值匹配。

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

【问题讨论】:

    标签: java delphi date calendar tdatetime


    【解决方案1】:
    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。我怀疑您的屏幕截图和文本文件并不完全准确。

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

    【讨论】:

      猜你喜欢
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多