gpt4 book ai didi

c# - 为什么 TimeSpan.ToString() 需要转义分隔符?

转载 作者:可可西里 更新时间:2023-11-01 08:10:20 25 4
gpt4 key购买 nike

您可以像这样为 DateTime 对象指定自定义格式:

DateTime.Now.ToString("HH:mm:ss");   // 19:55:23

但是当我尝试对 TimeSpan 对象使用相同的格式时,如下所示:

DateTime.Now.TimeOfDay.ToString("HH:mm:ss");

我收到 “输入字符串的格式不正确。” 异常。

事实证明,解决方案是您需要像 "HH\\:mm\\:ss" 那样对 ':' 字符进行转义。请注意,这里有一个双反斜杠,因为如果您只指定一个,它会破坏字符串,因此您也需要转义那个。

问题是,.NET Framework 开发人员为什么要这样做?必须有一个肯定的理由。为什么我们不能像使用 DateTime 对象那样在不转义的情况下使用自定义格式说明符?

正在寻找 .NET 专家来阐明这个主题。

最佳答案

documentation 中所述,DateTime.ToStringTimeSpan.ToString 格式说明符之间的区别之一如下:自定义 TimeSpan 格式说明符不包括占位符分隔符,例如将天与小时、小时与分钟或秒与小数秒分开的符号。相反,这些符号必须作为字符串文字包含在自定义格式字符串中

contrast使用 TimeSpan(请参阅文档中的格式说明符表)、DateTime 格式说明符包括日期分隔符 / 和时间分隔符 的预定义符号>:。这意味着,例如对于意大利文化,分号将被识别为时间分隔符(而不是文字),并将被替换为 符号:

    // outputs 09.57.18 instead of 09:57:18 because of Italian culture.
Console.WriteLine(DateTime.Now.ToString("hh:mm:ss", CultureInfo.GetCultureInfo("it-IT")));

我认为 .NET 设计者有意在 DateTimeTimeSpan 字符串格式化程序之间做出这样的区别,这是非常合理的。这是因为历史上日期/时间的格式因不同的文化而异。 .NET 试图为这件事提供全局化手段以及 DateTime 类型。但是 TimeSpan 没有得到这样的“全局化”职责,它只是一种表示时间段的类型,它的格式与任何文化细节无关(如果它们曾经存在的话),而是格式化它在不同的文化环境中是不变的。

关于c# - 为什么 TimeSpan.ToString() 需要转义分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20924278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com