在Java中的Date是以long記錄時間,單位是ms,0表示1970-01-01 00:00:00 GMT,而Delphi的TDateTime則是以double記錄時間,0.0表示1899-12-30 00:00:00,整數部分代表從前述時間到某個日期所經過的天數,小數部分乘以86400代表該日經過的秒數。

從1899年12月30日到1970年1月1日,共計25569日,每日計有86400000ms,因此要把Java的時間轉成Delphi的格式可用下列程式:

static final double DAYS_BETWEEN_18991230_AND_19700101 = 25569;
static final double MILLISECONDS_PER_DAY = 86400000;

public static double javaTimeToDelphiTime(final Date time) {
 return (time.getTime() + TIME_ZONE_OFFSET_MILLIS) / MILLISECONDS_PER_DAY + DAYS_BETWEEN_18991230_AND_19700101;
}

經過計算得到的時間就可以直接給在Delphi使用。要將時間換算成Java格式可用:

public static Date delphiTimeToJavaTime(final double time) {
 return new Date((long)((time - DAYS_BETWEEN_18991230_AND_19700101) * MILLISECONDS_PER_DAY - TIME_ZONE_OFFSET_MILLIS));
}

以上就是Java的Date和Delphi的TDateTime的暴力法轉換方式。

文章標籤
全站熱搜
創作者介紹
創作者 Forth 的頭像
Forth

不就是個blog

Forth 發表在 痞客邦 留言(0) 人氣(154)