![](/img/trans.png)
[英]Calculation error when representing TDateTime (Delphi) as a Java Calendar object
[英]Delphi tdatetime to Java Date/Calender
我有一個問題,德爾福 - 在那里破解。
我的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時會出現相同的問題。 轉換后的日期並不總是與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.