Was bedeutet ein einfaches Anführungszeichen in einem C # -Datum-Zeitformat?

55

Wir haben zB diese Konstante in C #:

System.Globalization.DateTimeFormatInfo.InvariantInfo.SortableDateTimePattern

Es hat diesen Wert:

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

Ich benutze es in der ParseExactFunktion und funktioniert dann yyyy-MM-ddTHH:mm:ssauch.

Ich kann nicht herausfinden, wofür die einfachen Anführungszeichen sind.

Ilya Chernomordik
quelle

Antworten:

76

Es ist ein wörtlicher Zeichenfolgenbegrenzer .

Alles zwischen den einfachen Anführungszeichen wird als Literalzeichen interpretiert und nicht als benutzerdefinierte Formatzeichenfolge.

Sie entsprechen dem Escape mit einem Backslash: dd'T'HHist dasselbe wie dd\THH.

In Ihrer Zeichenfolge yyyy'-'MM'-'dd'T'HH':'mm':'sssind die Anführungszeichen um das -und Tnicht erforderlich, da es sich nicht um Zeichenfolgen im benutzerdefinierten Format handelt, und werden daher immer als Zeichenfolgenliterale interpretiert. Es handelt sich jedoch : um einen Formatbezeichner , der ein Zeittrennzeichen ergibt , das für die aktuelle Kultur geeignet ist. Wenn Sie es als zitieren ':', wird der wörtliche Charakter :unabhängig von der aktuellen Kultur immer verwendet.

canton7
quelle
2

Es ist nützlich zu wissen, dass dies dasselbe Format ist, das von der Windows- Funktion GetDateFormat verwendet wird. Sie verwenden Apostrophe, um ein Literal anzugeben, das in die resultierende Zeichenfolge eingefügt werden soll.

Weitere Dokumentation der Zeichenfolgenformatierungscodes finden Sie unter:

In Ihrer Zeichenfolge bedeutet dies, dass Bindestriche, Doppelpunkte und die T- Zeichen buchstäblich hinzugefügt werden sollen :

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

In der Regel wollen Sie nicht Daten / Zeiten mit konstruieren wahrsten Sinne des Wortes ein Bindestrich ( -) oder Doppelpunkte ( :) oder sogar Schrägstriche ( /). Weil diese für Kulturen falsch sind, die keine Schrägstriche und Doppelpunkte verwenden, um Datums- / Uhrzeitangaben zu erstellen:

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

Was Sie tun möchten, wenn Sie Folgendes angeben möchten:

  • "Hier sollten Sie das Datumstrennzeichen setzen"
  • "Hier sollten Sie das Zeittrennzeichen setzen"

Verwenden Sie das Besondere:

  • Ersatzzeichen für Datumstrennzeichen (/)
  • Zeittrennzeichen Ersatzzeichen (:)

Und konstruieren Sie ein Format wie:

TT / JJJJ / MM SS: HH: mm

Ich weiß nicht, welche geschäftlichen Anforderungen ein Datum haben muss:

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

Auf diese Weise fügt der Lokalisierer die korrekten Datums- und Zeittrennzeichen der Kultur ein.

Wenn Sie buchstäblich danach gefragt /haben -, oder ::

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

Sie werden buchstäblich bekommen:

  • 22/2019/10 37:10:24

eher, als:

  • 22-2019-10 37∶10∶24
Ian Boyd
quelle
Ich denke nicht, dass die Datums- und Zeitformatzeichenfolgen von .NET identisch sind mit GetDateFormat. Ähnlich vielleicht, aber zum Beispiel ist die Bedeutung von yyyyyanders. Angesichts der Tatsache, dass diese Frage eine bemerkenswerte Aufmerksamkeit erhält und es um C # / geht, empfehle ich, diese Aussage zu korrigieren und stattdessen auf die .NET-Dokumente zu verlinken.
Kanton7