Co oznacza pojedynczy cytat w formacie daty i godziny C #?

55

Mamy np. Tę stałą w C #:

System.Globalization.DateTimeFormatInfo.InvariantInfo.SortableDateTimePattern

Ma tę wartość:

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

Używam go w ParseExactfunkcji, a następnie yyyy-MM-ddTHH:mm:ssdziała również.

Nie mogę zrozumieć, do czego służą pojedyncze cytaty.

Ilya Chernomordik
źródło

Odpowiedzi:

76

Jest to dosłowny ogranicznik łańcucha .

Cokolwiek pomiędzy pojedynczymi cudzysłowami jest interpretowane jako dosłowny znak i nie będzie interpretowane jako ciąg formatu niestandardowego.

Są równoważne ucieczce za pomocą odwrotnego ukośnika: dd'T'HHjest taki sam jak dd\THH.

W twoim łańcuchu yyyy'-'MM'-'dd'T'HH':'mm':'sscudzysłowy są niepotrzebne, -a Tponieważ nie są to ciągi formatu niestandardowego, dlatego zawsze będą interpretowane jako literały ciągów. Jednak : to specyfikator formatu , który ocenia do separatora czasu, który jest odpowiedni dla bieżącej kultury. Cytując to jako ':'oznacza, że ​​dosłowny charakter :będzie zawsze używany, niezależnie od obecnej kultury.

kanton7
źródło
2

Warto wiedzieć, że jest to ten sam format używany przez funkcję Windows GetDateFormat . Używasz apostrofów, aby wskazać literał, który chcesz wstawić do wynikowego łańcucha.

Więcej dokumentacji kodów formatowania ciągów można znaleźć na:

W twoim ciągu wskazuje, że dosłownie chce dodać łączniki, dwukropki i znaki T :

rrrr '-'MM '-'dd 'T'GG ':'mm ':'ss

Zasadniczo nie chcesz konstruować dat / godzin z dosłownie łącznikami ( -) lub dwukropkami ( :), a nawet ukośnikami ( /). Ponieważ są one niewłaściwe dla kultur, które nie używają ukośników i dwukropków do konstruowania dat / godzin:

  • 22.10.2019 10∶19∶54 ᴀᴍ
        1. 10:19:54
  • 2019.10.22 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
      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
  • 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 ق.ظ

Co chcesz zrobić, jeśli chcesz wskazać:

  • „tutaj należy umieścić separator daty”
  • „tutaj należy umieścić separator czasu”

Czy używa specjalnego:

  • znak zastępujący separator daty (/)
  • znak zastępujący separator czasu (:)

I stwórz format taki jak:

dd / rrrr / MM ss: GG: mm

Nie wiem, jaką potrzebę biznesową trzeba mieć, aby pokazać datę, ponieważ:

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

Ale w ten sposób lokalizator wstawi poprawne separatory daty i godziny kultury.

Natomiast jeśli dosłownie poprosił /, -czy ::

  • dd '/'rrrr '/'MM ss ':'GG ':'mm

Otrzymasz dosłownie:

  • 22/2019/10 37:10:24

zamiast:

  • 22-2019-10 37∶10∶24
Ian Boyd
źródło
Nie sądzę, aby ciągi formatu daty i godziny .NET były identyczne GetDateFormat. Być może podobne, ale na przykład znaczenie yyyyyjest inne. Biorąc pod uwagę, że to pytanie zyskuje niezwykłą uwagę i dotyczy C # /, sugeruję poprawienie tego oświadczenia i przejście do dokumentów .NET.
kanton7,