【问题标题】:Is a DateTime.ToString format expression affected by the current culture locale?DateTime.ToString 格式表达式是否受当前区域性影响?
【发布时间】:2013-12-03 21:32:33
【问题描述】:

我有一些代码从胖客户端应用程序中记录格式的时间戳

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

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

11-20-13 02:14:03

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

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

当前的区域性区域设置会影响此格式字符串的输出吗?还是 / 有其他我不知道的含义?

【问题讨论】:

    标签: c# .net string datetime locale


    【解决方案1】:

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

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

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

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

    或者在格式化字符串时指定一个明确的文化:

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

    【讨论】:

    • 你为什么同时使用 @ 意思是这个字符串的字面意思和 转义字符 \?
    • @Harrison 有点像。 @ 创建一个“逐字”字符串文字,是的,这意味着 \ 字符是文字​​ \,而不是转义序列的一部分。请参阅string (C# Reference) 了解更多信息。
    【解决方案2】:

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

    要改变这种情况,请使用 \ 转义它们:

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

    【讨论】:

      猜你喜欢
      • 2011-07-24
      • 2017-04-01
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多