2017-08-22 102 views
0

我在墨西哥有一臺運行我的應用程序的RHEL6 Linux服務器。服務器時區是CDT。因此,當我在Linux命令行上發出「date」命令時,我會得到正確的日期和時間,這是我一個小時的時間。 (我在美國東部時間)。使用服務器時區的JSP顯示服務器日期和時間

但是,當我使用java.util.date對象並在JSP中顯示當前服務器日期時,它顯示我的時區的正確日期和時間。

比如我用:

<% ... 
Date local = new Date(); 
out.write("'" + local + "'"); 
... %> 

這表明,比方說,

週二8月22日14時39分十三秒EDT 2017年

,日期和時間我我正在寫這個。但我需要顯示

週二8月22日13時39分13秒CDT 2017年

這是服務器的實際日期和時間。

我對Java,JSP有點新鮮。所以我不確定如何以我需要的方式獲得輸出。

謝謝

+0

[顯示服務器時間到JSP](https://stackoverflow.com/questions/19515138/displaying-server-time-on-jsp-page) –

+1

@BerkleyLamb我看了你提到的SO問題/答案之前問我的問題。從我所看到的情況來看,它沒有解決我確保日期/時間在JSP中正確顯示的具體需求。而且我目前沒有使用JavaScript來不斷查詢日期時間的服務器。謝謝你,雖然,對於你的輸入 –

+0

@NimrodArgov,我需要看看你的建議SO發佈更深一點。它可能實際上會導致一些見解。謝謝 –

回答

2

你的問題是許多人的副本,所以簡單...

不要使用麻煩的遺產date.time班,現在java.time類取代。

Date始終採用UTC,但其toString方法動態應用JVM的當前默認時區。混亂。 許多避免遺留類的原因之一。

總是指定您想要的/預期的時區。絕不要隱式地依賴於JVM的當前時區。所以作爲一名程序員,你永遠不應該關心部署的服務器可能設置的區域。該缺省值可以在運行時隨時更改,因此不可靠。

切勿使用3-4字母的僞時區,如CDT或EDT。它們不是實際的區域,它們不是標準化的,它們甚至不是唯一的! Real time zones,名稱爲continent/region

ZonedDateTime.now(
    ZoneId.of("America/Mexico_City") 
).toString() 

其他格式請參閱DateTimeFormatter。請注意0​​方法。

如何獲取用戶所需的時區?您可以嘗試通過網絡瀏覽器獲取默認偏移量。我記得瀏覽器只返回當前的偏移量,而不是全時區。但最終唯一確定的方法是明確詢問用戶。

+0

感謝您的意見。不幸的是,這是我正在使用的遺留代碼,可能無法相應地進行更新 –

+0

@PaulStoner(A)如果捕獲當前時刻並生成一個字符串,那麼如何綁定到舊代碼? (B)此外,僅供參考,您可以通過添加到舊類的新方法轉換爲java.time。因此,您可以始終與舊代碼進行交互,同時僅在您的新代碼中使用java.time。舊的日期 - 時間類真的很糟糕,應該避免。 –

相關問題