Что означает одиночная кавычка в формате даты и времени C #?

55

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

System.Globalization.DateTimeFormatInfo.InvariantInfo.SortableDateTimePattern

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

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

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

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

Илья Черномордик
источник

Ответы:

76

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

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

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

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

canton7
источник
2

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

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

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

гггг '-'мм '-'дд 'T'чч ':'мм ':'сс

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

  • 22.10.2009 10∶19∶54 ᴀᴍ
        1. 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 སྔ་ ཆ་
  • 2019-10-22 오전 10:19:54
      1. 2019 10:19:54
        1. 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 пд
  • 22.10.2019 г. 10:19:54
  • 22.10.2019. 10:19:54
  • 22-10-19 10.19.54
  • 22-10-19 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-окт. 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
      1. 10 37∶10∶24

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

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

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

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

  • 22/2019/10 37:10:24

скорее, чем:

  • 22-2019-10 37∶10∶24
Ян Бойд
источник
Я не думаю, что строки формата даты и времени .NET идентичны GetDateFormat . Возможно, похоже, но, например, значение yyyyyотличается. Учитывая, что этот вопрос привлекает значительное внимание и касается C # /, я предлагаю исправить это утверждение и вместо этого ссылаться на документы .NET.
canton7