簡體   English   中英

Delphi tdatetime到Java Date / Calender

[英]Delphi tdatetime to Java Date/Calender

我有一個問題,德爾福 - 在那里破解。

我的Java應用程序正在與Delphi應用程序通信。 Delphi應用程序在其UI中顯示一些日期值,這些日期值應通過文件傳輸到Java應用程序中。

但是,不是UTC或任何時間字符串,delphi應用程序導出一些浮點數,我希望它們只是日期的內部tdatetime值。

以下使用MM / dd / YYYY格式說明了這一點:

  • UI:10/07/2014 - >出口:41919,00
  • UI:05/31/2017 - >出口:42887,00
  • 用戶界面:09/30/2015 - >出口: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

但令我驚訝的是,這是不正確的

  • 出口: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的截圖和導出的文件。 因此,屏幕截圖和導出本身可能並不完全正確。

這也可以解釋為什么

  • UI:05/31/2017 - > 42887,00,有時42886,00

還有其他解釋嗎? 我認為它可能與Java和Delphie中閏年的不同處理方式有關,但我無法弄清楚這一點。

使用Date並執行一些ms-addition時會出現相同的問題。 轉換后的日期並不總是與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。 我懷疑你的截圖和文本文件並不完全准確。

對於沒有小數分量的日期時間值,您的方法是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM