c#日期组件错误或我错过了什么?

时间:2011-03-18 09:55:12

标签: c# datetime

我的代码存在很大问题:

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

问题是,C#使用系统日期分隔符而不是总是使用我指定的“/”。如果我运行该代码,我会得到以下输出:

2011/03/18

但如果我去“控制面板” - > “区域和语言选项”并将日期分隔符更改为“ - ”,我得到

2011-03-18

即使在toString方法中我指定使用'/'。我错过了什么,或者这是C#/ .Net Framework错误?

8 个答案:

答案 0 :(得分:5)

试试这样:

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

或逃避/

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

答案 1 :(得分:5)

您的格式字符串中的/a placeholder for the date separator - 您所看到的行为是设计并且清晰记录。

如果您的格式字符串中需要文字/然后you need to escape it,那么应该看起来像“yyyy \ / MM \ / dd” “YYYY '/' MM '/' DD”

答案 2 :(得分:3)

问题是/是为日期字符保留的 - 所以这不是一个错误 - 这是一个根据语言环境解释的功能。

尝试使用:

escpaing / character
var d = DateTime.Now;
d.ToString("yy\\/mm\\/dd").Dump();

答案 3 :(得分:2)

InvariantCulture应该做的伎俩

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

答案 4 :(得分:1)

您可以根据您提供的格式获得“ - ”或“:”。参考http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspx

答案 5 :(得分:1)

/是日期分隔符:

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

如果您需要自定义分隔符:

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#dateSeparator

所以行为正确

答案 6 :(得分:1)

您可以转义/字符,因为它是日期分隔符,如下所示:

var d = DateTime.Now;
var s = d.ToString(@"yyyy\/MM\/dd");

阅读所有相关信息:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

答案 7 :(得分:1)

这显然是设计上的。

该工作在名为DateTimeFormat的内部类中实现,您可以在FormatCustomized方法中看到此代码段:

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

因此,它将/替换为DateSeparator