Que signifie une seule citation dans un format d'heure de date C #?

55

Nous avons par exemple cette constante en C #:

System.Globalization.DateTimeFormatInfo.InvariantInfo.SortableDateTimePattern

Il a cette valeur:

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

Je l'utilise dans la ParseExactfonction et yyyy-MM-ddTHH:mm:ssfonctionne également.

Je ne peux pas comprendre à quoi servent les guillemets simples.

Ilya Chernomordik
la source

Réponses:

76

Il s'agit d'un délimiteur de chaîne littéral .

Tout ce qui se trouve entre les guillemets simples est interprété comme un caractère littéral et ne sera pas interprété comme une chaîne de format personnalisé.

Ils sont équivalents à un échappement à l'aide d'une barre oblique inverse: dd'T'HHest le même que dd\THH.

Dans votre chaîne yyyy'-'MM'-'dd'T'HH':'mm':'ss, les guillemets sont inutiles autour de -et T, car ce ne sont pas des chaînes de format personnalisé, et seront donc toujours interprétés comme des littéraux de chaîne. Cependant, il : s'agit d'un spécificateur de format , qui évalue un séparateur de temps adapté à la culture actuelle. Le citer comme ':'signifie que le caractère littéral :sera toujours utilisé, quelle que soit la culture actuelle.

canton7
la source
2

Il est utile de savoir qu'il s'agit du même format utilisé par la fonction Windows GetDateFormat . Vous utilisez l'apostrophe pour indiquer un littéral que vous souhaitez insérer dans la chaîne résultante.

Vous trouverez plus de documentation sur les codes de formatage des chaînes sur:

Dans votre chaîne, cela indique qu'il veut littéralement ajouter des traits d'union, des deux-points et des caractères T :

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

En général, vous ne voulez pas construire de dates / heures avec littéralement des tirets ( -) ou des deux-points ( :), ou même des barres obliques ( /). Parce que ceux-ci sont mauvais pour les cultures qui n'utilisent pas de barres obliques et de deux points pour construire des dates / heures:

  • 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 ق.ظ

Ce que vous voudriez faire si vous voulez indiquer:

  • "c'est ici que vous devez mettre le séparateur de date"
  • "c'est ici que vous devez mettre le séparateur de temps"

Est d'utiliser le spécial:

  • caractère de remplacement du séparateur de date (/)
  • caractère de remplacement du séparateur de temps (:)

Et construisez un format tel que:

jj / aaaa / MM ss: HH: mm

Je ne sais pas de quel besoin professionnel on pourrait avoir à afficher une date comme:

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

Mais de cette façon, le localisateur insérera les séparateurs de date et d'heure corrects de la culture.

Alors que si vous littéralement demandé /, -ou ::

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

Vous obtiendrez littéralement:

  • 22/2019/10 37:10:24

plutôt que:

  • 22-2019-10 37∶10∶24
Ian Boyd
la source
Je ne pense pas que les chaînes de format de date et d'heure de .NET soient identiques à GetDateFormat. Similaire peut-être, mais par exemple la signification de yyyyyest différente. Étant donné que cette question reçoit une attention considérable, et qu'il s'agit de C # /, je suggère de corriger cette déclaration et de créer un lien vers les documents .NET à la place.
canton7