這兩天在做與某知名一卡通公司的單點登錄集成(我們的產品使用Java編寫,對方的程序使用.Net編寫)其中有一項參數是時間戳。即當前時間相對于公元1970-1-1 00:00:00的秒數。按照他們給出的文檔我完成了Java部分的編寫,時間戳部分很簡單,一句話:
private String createTimestamp() //timestamp
{
return System.currentTimeMillis() / 1000 + "";
}
使用System.currentTimeMillis()方法就能得到自1970年1月1日0時0分0秒的毫秒數,除以1000自然是秒數。但是意外卻發生了,我產生的時間戳跟他們公司產生的時間戳差了一大截,查閱資料后發現.Net跟Java在處理時間上有出入。
.Net產生的時間都是當前時區的當前時間,而Java的currentTimeMillis()方法得到的卻是相對于GMT來的時間。中國所在時區是+8區,故時間整整差了8小時!
所以當童鞋們再遇到.Net跟Java時間不一致的時候,多往時區方面考慮考慮,說不定就能找到解決辦法了 :)
當然我會給出解決方案:
方法一:JVM運行時增加參數,指定時區 -D user.timezone=GMT+08
方法二:直接在程序中設置時區。System.setProperty(“user.timezone”,”GMT +08″);
方法三:直接加上28800就好了(8hours*60min*60sec=28800)