Delphi与Java中的日期互换

在最近做的一个项目中用到了Java和Delphi,发现它们不能正确读取对方的日期类型,如在Java中写入一个值为“2007-12-1”的日期值,通过Delphi读取却不是这个值了。

通过查阅资料,发现两者对日期类型的定义略有不同。Java中日期使用的是长整型进行存储的,它表示距“1970-1-1”的毫秒数。如“1970-1-2”是在“1970-1-1”后的86400000毫秒,所以Java中就使用86400000表示“1970-1-2”这个日期。由于长整型是带符号的,所以我们可以使用负的毫秒数来表示在“1970-1-1”之前的日期。而Delphi中的日期则是使用双精度类型进行存储的,整数部分表示距“1899-12-30”的天数,小数部分表示小时。如“2.75”这个数值则表示“1900-1-1 6:00PM”,“-1.25”则表示“1899-12-29 6:00 AM”。

由于两者的日期类型的起始日期不一样,即相同的“0”值在两者中表示不同的日期。那么在Java与Delphi之间进行日期值的通信时就需要进行一个转换。

// 将Java中的日期转换为Delphi中的日期
functionConvertJavaDateTimeToDelphiDateTime(Value:Int64):TDateTime;
begin
Result:
= IncMilliSecond(StrToDate( ' 1970-1-1 ' ),Value);
end;

// 将Delphi中的日期转换为Java中的日期
functionConvertDelphiDateTimeToJavaDateTime(ADateTime:TDateTime):Extended;
begin
Result:
= MilliSecondSpan(ADateTime,StrToDate( ' 1970-1-1 ' ))
end;

版权声明:本文为博主原创文章,未经博主允许不得转载。

你可能感兴趣的:(java,Delphi)