2014-01-30 54 views
0

我試圖日期轉換格式如下改變行爲"d/MM/yyyy"C#TryParseExact CultureInfo.InvariantCulture當文化變革

例如:

  • 2014年5月11日
  • 12/12/2013
  • 31/01/2012

我使用TryParseExact方法:

private const string DateFormat = "d/MM/yyyy"; 
Culture = CultureInfo.InvariantCulture; 
DateTime creationDateConverted; 
DateTime.TryParseExact(creationDate, DateFormat, Culture, 
      DateTimeStyles.None, out creationDateConverted); 

顯示方法

@Html.DisplayFor(m => object.date) 

date having : DisplayFormat(DataFormatString="{0:d/MM/yyyy}") 

哪臺主機的網站有一個美國文化的服務器。

如果我使用Web.config將文化設置爲fr-FR,它運行良好。

但是,如果我不設置該文化,它不起作用,它會將其轉換爲MM/dd/yyyy格式,當然有些日期不會以該格式傳遞。

我不明白爲什麼文化會影響該方法,因爲我提供了特定的格式和文化不變性。

我也試圖提供一個文化FR-神父的方法,但沒有運氣

編輯:當我說失敗了,我指的是TryParseExact方法返回false

+0

請注意,您發佈瞭解析代碼,但詢問它爲什麼基於當前文化進行格式化,而未顯示格式代碼。 –

+0

如果不是絕對必須以任何種類的本地化格式顯示日期,那麼在[ISO 8601](http://www.iso.org/iso/home/standards/iso8601)中顯示它可能是一個好主意。 htm)格式:yyyy-MM-dd。 – Corak

+0

這個解析代碼沒有錯,它是文化不變的。你如何詢問結果,即查看'creationDateConverted'設置爲什麼? – Jodrell

回答

3

的DateTime沒有格式。 ToString方法的輸出取決於文化。

如果你想有一個特定的格式,使用這樣的:

creationDateConverted.ToString("d/MM/yyyy"); 
+0

「如果你想要一個特定的格式使用這個」 - 你的例子並不是明確的,因爲它使用文化特定的日期分隔符「/」。例如,在德國文化中,這將被渲染爲「。」。你應該添加一個參數CultureInfo.InvariantCulture。 – Joe

+0

嗨,謝謝,我用的是「d/MM/yyyy」的DisplayFormat,所以我沒有問題,這是問題 – Alois

+0

您好實際上問題是creationDate在服務器上有不同的格式,所以您的解決方案是有效的。謝謝大家! – Alois

0

您已發佈的分析代碼是任何外來文化設置的影響。

但是,文化可能會影響您在詢問DateTimecreationDateConverted的值時發生的情況。

+0

嗨,謝謝我把代碼顯示日期,但有我的代碼有問題,因爲服務器無法轉換某些日期(我添加了日誌來檢查,無論它是否失敗) – Alois