2011-03-18 137 views
6

我用下面的代碼一個巨大的問題:c#日期組件錯誤還是我錯過了什麼?

DateTime date = DateTime.Now; 
String yearmonthday = date.ToString("yyyy/MM/dd"); 
MessageBox.Show(yearmonthday); 

問題是,C#使用系統日期分隔符,而不是始終使用「/」作爲我的指定。如果我運行的代碼,我得到以下輸出:

2011/03/18 

,但如果我去「控制面板」 - >「區域和語言選項」並更改日期分隔符爲「 - 」,我得到

2011-03-18 

即使在我指定使用'/'的toString方法中。我錯過了什麼,或者這是一個C#/ .Net框架錯誤?

回答

5

嘗試這樣的:

String yearmonthday = date.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture); 

或逃避/

String yearmonthday = date.ToString(@"yyyy\/MM\/dd"); 
+0

好了,現在它的工作原理。順便說一句,似乎很愚蠢,必須指定參數,如果我寫在字符串中的確切格式我想... – kaharas 2011-03-18 10:03:18

+1

@kaharas,'/'格式具有特殊含義=>它代表當前文化的日期分隔符。 – 2011-03-18 10:04:00

+0

@Kaharas對我來說,這似乎也很愚蠢。看到我的答案。 – Aliostad 2011-03-18 10:04:53

2

InvariantCulture應該做的伎倆

String yearmonthday = DateTime.Now.ToString("yyyy/MM/dd",CultureInfo.InvariantCulture); 
1

這顯然是由設計。

工作是在一個名爲DateTimeFormat您可以在FormatCustomized方法看到這個片段內部類實現:

case '/': 
     { 
      outputBuffer.Append(dtfi.DateSeparator); 
      num2 = 1; 
      continue; 
     } 

所以它取代/DateSeparator

3

問題是/爲日期字符保留 - 所以這不是一個錯誤 - 這是一個功能,它得到解釋根據語言環境。

嘗試escpaing /字符有:

var d = DateTime.Now; 
d.ToString("yy\\/mm\\/dd").Dump(); 
相關問題