无法使用" /"更改日期格式作为分隔符,如果默认系统日期格式为" - "作为日期分隔符

时间:2017-09-05 09:46:08

标签: c# asp.net date datetime

在我的本地机器中,系统短日期设置的格式为" 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

但是,如果我将短日期的系统日期设置更改为" 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

在上面的代码中,我甚至将分隔符更改为" /"它仍在给予" - "在输出中。如何输出第4个到" 05/09/2017"。

1 个答案:

答案 0 :(得分:4)

/字符是DateTime的特殊格式字符,表示“使用指定/当前区域设置的日期分隔符”。

如果你想强迫它使用/,你必须用单引号包围它来逃避角色:

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

Alteratively, you can escape it with the \ character:

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

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

最后,您还可以使用双引号来转义它,但这更难以理解:

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

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

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