将DateTime格式化为字符串

5
以下代码:
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

从输出的第一行可以看出,在我的PC的地区设置中,日期/时间格式为日期.月份.年份 HHmm.ss
第二行输出让我感到困惑。虽然我在变量s中指定了MM/dd/yyyy格式,但是DateTime对象的格式却是MM.dd.yyyy。为什么呢?
这是一个基于.NET Framework 4的C# WPF程序。
1个回答

7

/ 是当前区域设置日期分隔符的占位符。如果您希望将其作为分隔符强制执行,则必须指定 CultureInfo.InvariantCulture

string s = dt.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture);

参考: "/"自定义格式说明符

当前或指定文化的DateTimeFormatInfo.DateSeparator属性检索适当的本地化日期分隔符。


如果要将string解析为DateTime,同样适用此方法。

下面的示例会在您当前区域设置的实际日期分隔符不是“/”时抛出FormatException异常:

DateTime.ParseExact("09/13/2013", "MM/dd/yyyy", null);  

总是有效:

DateTime.ParseExact("09/13/2013", "MM/dd/yyyy", CultureInfo.InvariantCulture);

+1 哇,我甚至从未意识到这一点,因为对我而言日期的分隔符是“/”。好发现。 - Adam Houldsworth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接