2016-10-03 25 views
7

我想顯示我的JSP頁面上格式化的日期,所以我用:JSP - 日期格式和谷歌的緩存

<fmt:formatDate pattern="MMM d" value="${myEvent.date}"/> 

它完美。它顯示在頁面上

Nov 28 

然而,當它是由谷歌緩存奇怪的事情發生了 - 緩存頁面上的日期顯示是這樣的:

2016-11-28 20:00:00.0 

任何人都可以解釋一下嗎?不應該格式化發生在服務器上?我的應用程序服務器(Tomcat)是否只發送HTML到頁面? Google如何知道這實際上是Java日期呢?

只是爲了澄清,爲了獲得緩存版本的頁面,我在Google上執行搜索,在搜索結果中顯示我的頁面,然後單擊向下箭頭並進入我的頁面的緩存版本。

+0

你是對的:Google應該只能訪問JSP/Servlet輸出的HTML標記 - 沒有別的辦法。所以它引出了一個問題:Google緩存從哪裏獲得它的價值?您應該查看源代碼,並查看標記在緩存頁面中的真實含義,與實時版本相比較。也不排除顯而易見的可能性:頁面的緩存版本可能在您實現格式化之前創建,*或*這只是Google緩存代碼中的一個錯誤(Google仍然由人工配置,他們會犯錯誤)。 – kolossus

+0

將Google的緩存版本與http://waybackmachine.org上的版本進行比較 – kolossus

+3

恐怕您幾乎只能得到真正的答案隨機猜測,除非有人爲Google工作並意識到他們的內部算法已準備好承擔風險他的工作只是爲了回答你的問題可能會有幫助我隨意的猜測是,負責歸檔頁面的機器人足夠聰明地識別不完整的日期,並用完整的日期替換它,以便在我們閱讀它時保持頁面信息一致。事實上,假設您在兩年內訪問您的緩存頁面,閱讀11月28日將是一個虛假信息,而2016-11-28 20:00:00.0將是正確的。 –

回答

-1

顯然,當請求JSP沒有「的Accept-Language」 HTTP標頭中,JSTL formatDate標籤不格式化日期,轉而返回的Date對象toString()結果。

您可以通過使用cUrl來獲取頁面源代碼(而不是在Chrome中查看頁面源代碼)來驗證此情況。

底線:如果您使用的是JSTL formatDate標籤,你想你的日期在谷歌的緩存進行格式化,應明確設置的語言環境。例如:

<fmt:setLocale value="en_US" /> 

我希望這有助於某人。