以下代码:
DateTime dt = new DateTime(2013, 9, 13, 14, 34, 0);
string s = dt.ToString("MM/dd/yyyy");
textBox1.AppendText(DateTime.Now + "\n");
textBox1.AppendText(s + "\n");
textBox1.AppendText(dt.ToString() + "\n");
在文本框中生成以下输出:
13.09.2013 1441.28
09.13.2013
13.09.2013 1434.00
从输出的第一行可以清楚地看到,在我的电脑的区域设置中,日期/时间的格式为date.month.year HHmm.ss
。
输出的第二行让我很困惑。虽然我为变量MM/dd/yyyy
指定了s
格式,但DateTime
对象的格式为MM.dd.yyyy
。为什么呢?
这是.NET Framework 4上的C#WPF程序。
答案 0 :(得分:7)
/
是您当前文化的日期分隔符的占位符。如果要将其强制为分隔符,则必须指定CultureInfo.InvariantCulture
:
string s = dt.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture);
请参阅:The "/" Custom Format Specifier
从中检索适当的本地化日期分隔符 当前或指定的
DateTimeFormatInfo.DateSeparator
属性 培养
如果您想要将string
解析为DateTime
,情况也是如此。
如果当前文化的实际日期分隔符不是FormatException
,则会抛出/
:
DateTime.ParseExact("09/13/2013", "MM/dd/yyyy", null);
始终有效:
DateTime.ParseExact("09/13/2013", "MM/dd/yyyy", CultureInfo.InvariantCulture);