O que significa uma única citação dentro de um formato de data e hora em C #?

55

Temos, por exemplo, essa constante em C #:

System.Globalization.DateTimeFormatInfo.InvariantInfo.SortableDateTimePattern

Tem este valor:

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

Eu o uso na ParseExactfunção e depois yyyy-MM-ddTHH:mm:ssfunciona também.

Não consigo descobrir para que servem as aspas simples.

Ilya Chernomordik
fonte

Respostas:

76

É um delimitador de string literal .

Qualquer coisa entre aspas simples é interpretada como um caractere literal e não será interpretada como uma sequência de formato personalizado.

Eles são equivalentes a escapar usando uma barra invertida: dd'T'HHé o mesmo que dd\THH.

Na sua sequência yyyy'-'MM'-'dd'T'HH':'mm':'ss, as aspas são desnecessárias em torno de -e T, como não são seqüências de caracteres de formato personalizado e, portanto, sempre serão interpretadas como literais de sequência. No entanto, : é um especificador de formato , que avalia um separador de tempo adequado para a cultura atual. A citação ':'significa que o caractere literal :será sempre usado, independentemente da cultura atual.

canton7
fonte
2

É útil saber que esse é o mesmo formato usado pela função Windows GetDateFormat . Você usa apóstrofos para indicar algum literal que deseja inserir na sequência resultante.

Mais documentação dos códigos de formatação de string pode ser encontrada em:

Na sua string, é indutor de que ele literalmente deseja adicionar hífens, dois pontos e os caracteres T :

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

Em geral, você não deseja construir datas / horas com literalmente hífens ( -) ou dois pontos ( :) ou até barras ( /). Como essas são errôneas para culturas que não usam barras e dois pontos para construir datas / horas:

  • 22/10/2019 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 AM
  • Postado por Unknown às 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 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-f. 19 10:19:54
  • 23/02/41 10:19:54 ص
  • 30/07/1398 10:19:54

O que você gostaria de fazer, se você deseja indicar:

  • "aqui é onde você deve colocar o separador de datas"
  • "aqui é onde você deve colocar o separador de hora"

É usar o especial:

  • caractere de substituição do separador de data (/)
  • caractere de substituição do separador de tempo (:)

E construa um formato como:

dd / aaaa / MM ss: HH: mm

Não sei de que empresa precisa para mostrar uma data como:

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

Mas dessa forma, o localizador inserirá os separadores de data e hora corretos da cultura.

Enquanto que se você literalmente pediu /, -ou ::

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

Você literalmente receberá:

  • 22/2019/10 37:10:24

ao invés de:

  • 22-2019-10 37∶10∶24
Ian Boyd
fonte
Não acho que as seqüências de formato de data e hora do .NET sejam idênticas GetDateFormat. Talvez semelhante, mas, por exemplo, o significado de yyyyyé diferente. Dado que esta pergunta está recebendo uma quantidade notável de atenção e se trata de C # /, sugiro que você corrija esta declaração e faça o link para os documentos do .NET.
Canton7