2011-03-18 140 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(); 
相关问题