Что означает одиночная кавычка в формате даты и времени C #? - PullRequest
55 голосов
/ 21 октября 2019

У нас есть, например, эта константа в C #:

System.Globalization.DateTimeFormatInfo.InvariantInfo.SortableDateTimePattern

У нее есть это значение:

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

Я использую ее в функции ParseExact, а затем yyyy-MM-ddTHH:mm:ss работаета также.

Я не могу понять, для чего нужны одинарные кавычки.

Ответы [ 2 ]

73 голосов
/ 21 октября 2019

Это буквенный разделитель строк .

Все, что находится в одинарных кавычках, интерпретируется как буквенный символ и не будет интерпретироваться как строка пользовательского формата.

Они эквивалентны экранированию с использованием обратной косой черты: dd'T'HH - это то же самое, что и dd\THH.

В вашей строке yyyy'-'MM'-'dd'T'HH':'mm':'ss кавычки не нужны вокруг - и T, так какне пользовательский формат строки, и поэтому всегда будет интерпретироваться как строковые литералы. Однако : - это спецификатор формата , который оценивается как разделитель времени, подходящий для текущей культуры. Цитирование ':' означает, что буквальный символ : будет использоваться всегда, независимо от текущей культуры.

2 голосов
/ 22 октября 2019

Полезно знать, что это тот же формат, который используется функцией Windows GetDateFormat . Вы используете апостроф для обозначения некоторого литерала, который вы хотите вставить в результирующую строку.

Дополнительную документацию кодов форматирования строки можно найти по адресу:

В вашей строке указывается, что буквально хочет добавить дефисы, двоеточия и символы T :

гггг '-' ММ '-' дд 'T' ЧЧ ':' мм':' ss

Как правило, вы не хотите строить даты / время с буквально дефисами (-) или двоеточиями (:) или даже косые черты (/). Потому что это неправильно для культур, которые не используют косые черты и двоеточия для построения дат / времени:

  • 10/22/2019 10∶19∶54 ᴀᴍ
  • 10: 19: 54
  • 2019.10.22 10: 19: 54
  • 2019-10-22 10.19.54
  • 2019-10-22 10: 19: 54
  • 2019-10-22 10:19:54
  • 2019-10-22 ཆུ་ཚོད་ 10:19:54 10 ཆ་
  • 2019-10-22 오전 10: 19: 54
  • 2019 10: 19: 54
  • 10: 19: 54
  • 22.10.19 10: 19: 54
  • 22.10.19 ý,10: 19: 54
  • 22.10.2019 10.19.54
  • 22.10.2019 10: 19: 54
  • 22.10.2019 10:19:54 pd
  • 22.10.2019 г. 10: 19: 54
  • 22.10.2019. 10: 19: 54
  • 22-10-19 10.19.54
  • 22-10-19 10.19.54 AM
  • 22-10-19 10:19:54
  • 22-10-19 ਸਵੇਰ 10: 19: 54
  • 22-10-2019 10: 19: 54
  • 22-10-2019 ৰাতিপু 10:19:54
  • 22-окт. 19 10: 19: 54
  • 23/02/41 10:19:54 ص
  • 30/07/1398 10:19:54 ق.ظ

Что бы вы хотели сделать, если хотите указать:

  • "здесь вы должны поместить разделитель даты"
  • "вот где вы должны поместить разделитель времени "

Используется специальный:

  • символ замены разделителя даты (/)
  • символ замены разделителя времени (:)

И создайте формат, такой как:

дд / гггг / мм сс:ЧЧ: мм

Я не знаю, что нужно бизнесу, чтобы указать дату как:

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

Но при этом локализатор будет вставлять правильные разделители даты и времени культуры.

Принимая во внимание, что если вы буквально попросили /, - или ::

  • дд '/' гггг '/' ММ сс ':' ЧЧ ':' мм

Вы получите буквально:

  • 22/2019/10 37:10:24

вместо:

  • 22-2019-10 37∶10∶24
...