无法更改以“/”作为分隔符的日期格式,如果默认系统日期格式以“-”作为日期分隔符

Ein*_*012 2 c# asp.net datetime date

在我的本地机器系统短日期设置格式为“M/d/yyyy”。在我的 C# 代码中,我可以使用将 DateTime 转换为“dd/MM/yyyy”或“dd-MM-yyyy”格式

//1
var date=string.Format("{0:dd/MM/yyyy}", DateTime.Now) //output is:05/09/2017
//2
var date=string.Format("{0:dd-MM-yyyy}", DateTime.Now) //output is:05-09-2017
Run Code Online (Sandbox Code Playgroud)

但是,如果我将短日期的系统日期设置更改为“yyyy-MM-dd”或任何将“-”作为分隔符而不是“/”的日期格式,我将无法将日期转换为其他格式,例如

//3
var date=string.Format("{0:dd-MM-yyyy}", DateTime.Now) //output is:05-09-2017
//4
var date=string.Format("{0:dd/MM/yyyy}", DateTime.Now) //output is still :05-09-2017
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,即使我将分隔符更改为“/”,它仍然在输出中给出“-”。如何将第四个输出到“05/09/2017”。

Mat*_*son 5

/字符是一个特殊的格式化字符DateTime,表示“使用指定/当前语言环境的日期分隔符”。

如果要强制使用它,则/必须通过用单引号将其括起来来转义该字符:

var date=string.Format("{0:dd'/'MM'/'yyyy}", DateTime.Now)
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用以下\字符对其进行转义:

var date=string.Format("{0:dd\\/MM\\/yyyy}", DateTime.Now)
Run Code Online (Sandbox Code Playgroud)

(但我发现第一种方法更具可读性。)

最后,您还可以使用双引号将其转义,但这更不可读:

var date = string.Format("{0:dd\"/\"MM\"/\"yyyy}", DateTime.Now);
Run Code Online (Sandbox Code Playgroud)

或者(正如乔恩指出的那样),您可以覆盖文化以使用/用作分隔符的文化:

var date = string.Format(CultureInfo.InvariantCulture, "{0:dd/MM/yyyy}", DateTime.Now);
Run Code Online (Sandbox Code Playgroud)