C#日期时间格式中的单引号是什么意思?

58

我们在C#中有这样一个常量:

System.Globalization.DateTimeFormatInfo.InvariantInfo.SortableDateTimePattern

它具有这个值:
"yyyy'-'MM'-'dd'T'HH':'mm':'ss"

我在ParseExact函数中使用了它,然后yyyy-MM-ddTHH:mm:ss同样有效。

我无法确定单引号的作用。

2个回答

81

这是一个文本串字面量分隔符

单引号之间的任何内容都会被解释为字符文字,并且不会被解释为自定义格式字符串。

它们相当于使用反斜杠进行转义:dd'T'HHdd\THH相同。

在你的字符串yyyy-MM-dd'T'HH:mm:ss中,-T周围的引号是不必要的,因为它们不是自定义格式字符串,所以始终会被解释为字符串文字。然而:是一个格式说明符,它会计算出适合当前语言环境的时间分隔符。将它用作':'的引号表示无论当前的语言环境是什么,都将始终使用文字字符:


2

需要注意的是,这个格式与Windows的GetDateFormat函数使用的格式相同。您可以使用单引号来指示要插入到结果字符串中的某些文字。

有关字符串格式代码的更多文档,请参见:

在您的字符串中,它表明它想要添加连字符、冒号和T字符:

yyyy '-' MM '-' dd 'T' HH ':' mm ':' ss

一般来说,您不应该使用连字符(-)、冒号(:)或甚至斜杠(/)来构建日期/时间。因为对于不使用斜杠和冒号来构建日期/时间的文化来说,这些是错误的。

  • 2019年10月22日 上午10:19:54
  • 2019.10.22 10:19:54
  • 2019-10-22 10.19.54
  • 2019-10-22 10:19:54 AM
  • 2019年10月22日 上午10:19:54
  • 2019年10月22日 오전 10:19:54
  • 2019年10月22日 10:19:54
  • 上午10:19:54,2019年10月22日
  • 2019年10月22日 10:19:54
  • 22.10.19 10:19:54
  • 22.10.19 ý. 10:19:54
  • 2019年10月22日 10:19:54
  • 2019-10-22 10:19:54 p.d.
  • 2019年10月22日 10:19:54
  • 22-окт. 19 10:19:54
  • 23/02/41 10:19:54 ص
  • 30/07/1398 10:19:54 ق.ظ

如果您想指示:

  • "这里是日期分隔符应该放置的位置"
  • "这里是时间分隔符应该放置的位置"

请使用特殊字符:

  • 日期分隔符替换字符 (/)
  • 时间分隔符替换字符 (:)

并构建一个格式如下:

dd/yyyy/MM ss:HH:mm

我不知道可能有哪些业务需要将日期显示为:

  • 22/2019/10 37:10:24
  • 22-2019-10 37∶10∶24
  • 22//2019//10 37::10::24
      1. 10 37∶10∶24

但是这种方式,本地化人员可以插入该文化正确的日期和时间分隔符。

而如果你文字上要求/, -, 或 ::

  • dd '/' yyyy '/' MM ss ':' HH ':' mm

你将会得到文字上的:

  • 22/2019/10 37:10:24

而不是:

  • 22-2019-10 37∶10∶24

我认为.NET的日期和时间格式字符串与GetDateFormat不完全相同。可能有些相似,但例如yyyyy的含义是不同的。考虑到这个问题引起了相当多的关注,并且它涉及到C# /,我建议更正这个陈述并链接到.NET文档。 - canton7

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