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

3

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

你可以尝试使用ToString格式化:DateTime.Now.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture); - Viliam
1个回答

6

/ 字符是 DateTime 中用于指定当前语言环境日期分隔符的特殊格式字符。

如果您想强制使用 /,则需要用单引号将其括起来进行转义:

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

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

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);

1
或者强制使用以 / 作为分隔符的 CultureInfo - Jon Skeet

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