DateTime.ToString格式表达式是否受当前区域性区域设置的影响?

时间:2013-11-20 03:17:24

标签: c# .net string datetime locale

我有一些代码正在从胖客户端应用程序

中记录格式的时间戳
DateTime.UtcNow.ToString("MM/dd/yy HH:mm:ss")

现在,在中国运行的客户端(不确定究竟是哪个区域设置),这将在日志中生成格式为

的日期
11-20-13 02:14:03

我注意到它正在使用 - 而不是/来划分部分,即使我明确地想要/

我尝试将当前文化设置为简体中文zh-CN但我无法重现远程客户端如何生成该字符串

当前区域性区域设置是否会影响此格式字符串的输出?或者是否有其他一些我不知道的含义?

2 个答案:

答案 0 :(得分:4)

是的,/字符是占位符,用于当前文化用于分隔日期部分的任何内容。来自MSDN

  

“/”自定义格式说明符表示日期分隔符,用于区分年,月和日。从当前或指定区域性的DateTimeFormatInfo.DateSeparator属性中检索适当的本地化日期分隔符。

与其他格式说明符一样,您可以使用/转义\

DateTime.UtcNow.ToString(@"MM\/dd\/yy HH\:mm\:ss")

或者在格式化字符串时指定显式文化:

DateTime.UtcNow.ToString("MM/dd/yy HH:mm:ss", CultureInfo.InvariantCulture)

答案 1 :(得分:3)

是的,这就是它的工作原理。 /正在被本地日期分隔符替换。这同样适用于:作为时间分隔符。您可以在MSDN上找到更多信息:Custom Date and Time Format Strings

要更改它,请使用\

转义它们
DateTime.UtcNow.ToString(@"MM\/dd\/yy HH\:mm\:ss")