我的代码存在很大问题:
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错误?
答案 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 / charactervar 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
。