当前区域设置是否会影响DateTime.ToString格式表达式的输出?

4

我有一些代码,来自一个厚客户端应用程序记录了一个时间戳格式

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

现在,在中国运行的客户端(不确定确切的语言环境)将以以下格式在日志中生成日期:

11-20-13 02:14:03

我注意到它使用“-”而不是我明确想要的“/”来分隔部分。
我尝试将当前区域设置为简体中文zh-CN,但我无法复制远程客户端如何生成该字符串的步骤。
当前区域设置是否影响此格式字符串的输出?还是“/”有其他意义我不知道的吗?
2个回答

5
是的,/字符是一个占位符,用于分隔日期的不同部分。根据MSDN的说明:

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

与其他格式说明符一样,您可以使用\来转义/
DateTime.UtcNow.ToString(@"MM\/dd\/yy HH\:mm\:ss")

或者在格式化字符串时指定明确的区域设置:

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

你为什么同时使用@表示将此字符串按字面意义解释和转义字符\? - Harrison
@Harrison 有点像。@ 创建了一个“逐字”字符串文字,是的,它意味着 \ 字符是一个字面上的 \,而不是转义序列的一部分。有关更多信息,请参见 string (C# 参考) - p.s.w.g

3
是的,就是这样。 / 将被本地日期分隔符替换。同样适用于: 作为时间分隔符。您可以在MSDN上找到更多信息:自定义日期和时间格式字符串
要更改,请使用\进行转义:
DateTime.UtcNow.ToString(@"MM\/dd\/yy HH\:mm\:ss")

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