2012-12-23 44 views
2

我有一個問題,我的Freemarker模板在不同的機器上產生不同的日期格式。Freemarker日期格式 - 在不同的機器上有所不同?

我的Freemarker宏是這樣的:

<#macro renderTextEntry textEntry> 
    <div id="text_entry_${textEntry.id}" class="text_entry"> 
     <span id="text_entry_${textEntry.id}_date" class="text_entry_date">${textEntry.time?datetime}</span>: 
     <div id="text_entry_${textEntry.id}_content" class="text_entry_content"><#noescape>${textEntry.text}</#noescape></div> 
     <button class="edit_text_entry">Edit</button> 
     <a class="delete_text_entry" href="/delete-text-entry?id=${textEntry.id}"><img 
       src="images/delete.png" alt="delete text entry"/></a> 
    </div> 
</#macro> 

我有一個單元測試的結果,與預期的結果是這樣的:

<div id="text_entry_5" class="text_entry"> 
    <span id="text_entry_5_date" class="text_entry_date">Jan 2, 1970 11:17:36 AM</span>: 
    <div id="text_entry_5_content" class="text_entry_content">some text</div> 
     <button class="edit_text_entry">Edit</button> 
     <a class="delete_text_entry" href="/delete-text-entry?id=5"> 
      <img src="images/delete.png" alt="delete text entry"/> 
     </a> 
</div> 

一個一體機這個測試通過。另一方面,它失敗了。唯一的區別是,該日期是輸出作爲

02-Jan-1970 11:17:36 

TextEntry.getDate()返回一個java.util.Date對象。

這兩臺機器都是運行OSX 10.7.5和Java 1.7.0_10-b18的MacbookPros。我不知道我已設置的任何環境變量影響默認的日期格式的 - 只需運行

System.out.println(new Date()); 

產生在兩臺機器上相同的輸出。我不知道這裏發生了什麼 - 任何幫助將不勝感激!

注:我已經通過顯式聲明的日期格式我想解決我的問題 - 現在有關Freemarker的片段是

${textEntry.time?string("MMM d, yyyy HH:mm:ss a")} 

但是,它仍然將是很好的瞭解是怎麼回事!

回答

2

由於日期/時間格式根據您的國籍而不同,因此FreeMarker的默認日期/時間格式取決於FreeMarker的locale設置。有關FreeMarker設置,請參閱http://freemarker.org/docs/pgui_config_settings.html。正如您所看到的,locale設置可以在各個級別指定,並且最好在模板之外完成。如果您的應用程序沒有國際化,您可能需要將其設置在setLocale(Locale)的FreeMarker Configuration對象中。否則,您可能希望在Environment級別上執行相同操作,以便它適合當前訪問者的語言環境。

由於您尚未在任何地方指定locale,因此FreeMarker使用了Java挑選的默認語言環境,該默認語言環境通常是(Web服務器的)操作系統的默認語言環境。從Date.toString開始,它主要用於調試程序員的眼睛,因此它忽略語言環境,這就是爲什麼它總是打印相同的原因。

注意,如果與語言環境相關的格式仍然不是你想要的,日期和時間格式,可以進行微調與FreeMarker的的date_formattime_formatdatetime_format設置。使用?string('...')只是最後一招。

2

也許您在另一臺計算機上使用其他瀏覽器語言?

據我所知默認的日期格式取決於使用的區域設置。

+0

這是全部在java中,所以它不是瀏覽器 - 但是,在一臺機器上,Locale.getDefault()是en_GB,另一個是en_US。在系統偏好設置中將我的首選語言更改爲英式英語修復了它仍然奇怪的是,打印新的Date()並沒有什麼不同。 –

+0

我很喜歡這個答案,因爲它讓我開始了,但接受ddekany的,因爲它更詳細。 –