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