2010-11-09 60 views
2

我有這樣的代碼在ASPX代碼以此來這裏設置的文化爲什麼en-IE文化在格式化字符串中不給我AM PM?

 public static CultureInfo GetRegionDefaultCulture(int regionId) 
     { 
      // removed code to shorten.... 
      return CultureInfo.CreateSpecificCulture("en-au"); 

     } 

使用它後面的代碼在我的測試例子

 Thread.CurrentThread.CurrentCulture = 
       CultureHelper.GetRegionDefaultCulture(regionId); 

我的測試例的背後

 DateTime dtNow = DateTime.Now; 
     Response.Write("<br/>" + dtNow.ToString("dd MMM yyyy hh:mm tt")); 

輸出

09 Nov 2010 04:42 PM 

如果我更新的代碼使用任何這些文化,我也正確地得到AM/PM輸出

en-PH 
en-GB 
en-US 
en-JM 

如果我更新代碼使用

en-IE 

輸出

09 Nov 2010 04:44 

我錯過了什麼嗎?爲什麼en-IE的行爲不同?

答案 從@Jordans答案獲得。

添加這一點的代碼工作。

  DateTimeFormatInfo info = CultureInfo.CurrentCulture.DateTimeFormat; 
      info.AMDesignator = "AM"; 
      info.PMDesignator = "PM"; 
+0

備案:http://en.wikipedia.org/wiki/Date_and_time_notation_by_country#Ireland – Kobi 2010-11-09 05:55:56

+1

國際化意味着並不總是獲得相同的產出。 – 2010-11-09 05:56:44

回答

2

根據documentation,如果文化不使用AM/PM,那麼tt將不會返回任何內容。

對於不使用AM指示符的文化,此屬性返回空字符串。

我找不到關於哪種文化具有AM指示符的文檔。文化信息是通過本機方法檢索的,我無法找到源文件。您可以使用以下代碼生成您自己的列表:

CultureInfo.GetCultures(CultureTypes.AllCultures) 
    .Where(c => string.IsNullOrEmpty(c.DateTimeFormat.AMDesignator))); 
+0

謝謝我認爲這是答案......如果我能找到證實哪些文化具有AM指示符的文檔,那麼就會證實......我已經有了一點谷歌,但沒有運氣。 – 2010-11-09 06:52:29

+0

@Rob。通過回答更新。 – jordanbtucker 2010-11-09 07:16:24

4

顯然,對於 「EN-IE」 區域設置默認使用24小時制,所以沒有必要AM/PM。

+0

你從哪裏得到這些信息? – 2010-11-09 05:55:45

+0

該問題的評論中的維基百科鏈接可能是一個很好的資源。區域設置相當寬鬆。誰爲en-IE實施它們是基於一些國家公約慣例的假設。顯然,Irelend傾向於使用比12小時鐘更多的24小時制時鐘,所以這就是該Locale的實施方式。 – 2010-11-09 06:01:43

+0

DateTime.Now提供了帶有en-GB的24小時格式...但是格式仍然給我AM/PM仍然 – 2010-11-09 06:51:03

0

這是Culture的行爲。它使用Windows文化設置來操縱其細節。如果您希望設置區域設置信息,則應設置AM/PM指示符。 這就是你使用@Jordans代碼所做的。

但這裏的問題是語言。 'AM'和'PM'適用於任何語言環境。但是需要發生的是'AM'和'PM'應該根據語言環境而改變。 E.G:如果您的區域設置信息是「zh-TW」,結果將是下午04:16:08。

因此使用24小時制是一種解決方案。但沒有上午/下午,因爲我們知道 E.G 3.15 PM = 15:15 這是一個很好的解決方案,因爲這是一個擱淺。

提供的第二個解決方案就是這個。 更改服務器的區域設置/文化設置。 請參考https://msdn.microsoft.com/en-us/library/bb688125.aspx

希望我的評論能幫到你。

相關問題