¿Qué significa una sola cita dentro de un formato de fecha y hora C #?

55

Tenemos, por ejemplo, esta constante en C #:

System.Globalization.DateTimeFormatInfo.InvariantInfo.SortableDateTimePattern

Tiene este valor:

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

Lo uso en la ParseExactfunción y luego yyyy-MM-ddTHH:mm:ssfunciona también.

No puedo entender para qué son las comillas simples.

Ilya Chernomordik
fuente

Respuestas:

76

Es un delimitador de cadena literal .

Cualquier cosa entre las comillas simples se interpreta como un carácter literal y no se interpretará como una cadena de formato personalizado.

Son equivalentes a escapar usando una barra invertida: dd'T'HHes lo mismo que dd\THH.

En su cadena yyyy'-'MM'-'dd'T'HH':'mm':'ss, las comillas son innecesarias alrededor de -y T, ya que no son cadenas de formato personalizadas, por lo que siempre se interpretarán como literales de cadena. Sin embargo, : es un especificador de formato , que se evalúa como un separador de tiempo adecuado para la cultura actual. Citarlo ':'significa que :siempre se usará el carácter literal , independientemente de la cultura actual.

canton7
fuente
2

Es útil saber que este es el mismo formato utilizado por la función GetDateFormat de Windows . Utiliza apóstrofos para indicar algún literal que desea insertar en la cadena resultante.

Se puede encontrar más documentación de los códigos de formato de cadena en:

En su cadena es indicio que literalmente quiere agregar guiones, dos puntos y los caracteres T :

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

En general, no desea construir fechas / horas literalmente con guiones ( -) o dos puntos ( :), o incluso barras ( /). Debido a que están mal para las culturas que no usan barras y dos puntos para construir fechas / 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
  • 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 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 ق.ظ

Qué desea hacer, si desea indicar:

  • "aquí es donde debes poner el separador de fecha"
  • "aquí es donde debes poner el separador de tiempo"

Es usar el especial:

  • carácter de reemplazo del separador de fecha (/)
  • carácter de reemplazo del separador de tiempo (:)

Y construya un formato como:

dd / aaaa / MM ss: HH: mm

No sé qué necesidad comercial podría tener que mostrar una fecha como:

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

Pero de esta manera el localizador insertará los separadores de fecha y hora correctos de la cultura.

Mientras que si , literalmente, pedirá /, -o ::

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

Literalmente obtendrás:

  • 22/2019/10 37:10:24

más bien que:

  • 22-2019-10 37∶10∶24
Ian Boyd
fuente
No creo que las cadenas de formato de fecha y hora de .NET sean idénticas a GetDateFormat. Quizás similar, pero por ejemplo el significado de yyyyyes diferente. Dado que esta pregunta está recibiendo una cantidad notable de atención, y se trata de C # /, sugiero corregir esta declaración y vincularla a los documentos .NET.
canton7