請看看我的代碼如下:的Java Calendar.getInstance()更改默認的時區中的Linux
SimpleDateFormat sd = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
sd.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(sd.format(calendar.getTime()));
我的Windows系統的默認時區是EDT在這個時刻和時間,當我跑這個代碼是(28/09/2016下午12點27分),當我運行此代碼在系統的輸出,我得到如下 - 其目的是(美國東部時間爲GMT轉換):
28/09/2016 04:00:00
但是當我在服務器上運行此(紅帽企業Linux服務器版本5.11)輸出我得到如下:
28/09/2016 00:00:00
當我運行下面的命令來對Linux shell
date +%Z
它返回下面的輸出
EDT
所以,我無法理解爲什麼轉換並沒有發生。另外,我有一段代碼象下面這樣:
SimpleDateFormat sd = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Calendar calendar = Calendar.getInstance();
sd.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(sd.format(calendar.getTime()));
低於輸出,返回(RAN它28/09/2016 12:36)相同的Linux服務器與預期輸出,它轉化爲GMT
28/09/2016 16:36:46
此代碼是在WebLogic 12c上運行的J2EE應用程序的一部分。如果您有任何線索,請分享,可能會導致上述情況。謝謝。
如果我沒有記錯,存在startWeblogic設置(或類似的,它已經好幾年,因爲我用的WebLogic),以覆蓋系統的時區,使用GMT(默認)。你可以通過在某處記錄'Calendar.getInstance()。getTimeZone()。toString()來驗證。 –
@ElliottFrisch我檢查了一下,並且它返回了GMT,但我不確定第二段代碼如何工作,它不應該轉換。 –
無法用提供的代碼重現問題。你是否向我們展示了真實的代碼或類似於真實代碼的代碼? –