DateTime.ToString() 不适用于自定义模式和非默认系统设置

DateTime.ToString() not working well for custom pattern and non-default system settings

我试图在 .NET 4.5 上使用以下 C# 代码从 DateTime 对象中获取字符串:

var dateTime = new DateTime(2015, 9, 30);
var str = dateTime.ToString("M/d/yyyy");

Console.WriteLine(str);

正常情况下,这段代码的输出是9/30/2015,符合预期。

但是,如果我转到“控制面板”、“区域和语言”并将美国英语的 "Short date" 模式更改为 "dd-MMM-yy",上面的代码会突然显示 9-30-2015!

有谁知道为什么会发生这种情况以及如何解决/解决这个问题?请注意,例如,如果我在“区域和语言”中选择另一个短日期模式,例如 "M/d/yy",代码将正常工作。

格式字符串中的

/ 被视为日期分隔符,并替换为区域设置中定义的分隔符。您必须使用 \(准确地说是 \

来转义它