2013-08-21 36 views
10

Metoda TryParseExact w bloku kodu poniżej zwraca true.
Chciałbym wiedzieć, dlaczego.
Myślę, że ta data "2013.03.12" jest nieprawidłowa, ponieważ nie jest ona oddzielona przecinkiem, ale kropką. Po zamianie CultureInfo"de-De" na "en-US", metoda zwraca . To może być podpowiedź, ale wciąż nie wiem, dlaczego tak się dzieje.TryParseExact zwraca wartość false, ale nie wiem, dlaczego

var format = new string[] { "yyyy/MM/dd" }; 
var parsed = new DateTime(); 
var result = DateTime.TryParseExact("2013.03.12", format, 
      new CultureInfo("de-DE"), DateTimeStyles.None, out parsed); 
+0

BTW: '2013.03.12' nie jest poprawnym/zwykły niemiecki format daty. "12.03.2013" będzie. –

Odpowiedz

17

myślę aktualnej DateSeparator jest . (kropka) i / automatycznie zamienić się do niego.

/ Separator ma szczególne znaczenie "zastąpić mi separator nurtu kulturowego za"

CultureInfo c = new CultureInfo("de-DE"); 
Console.WriteLine(c.DateTimeFormat.DateSeparator); //Prints . (dot) 

Spójrz na The "/" Custom Format Specifier

+3

Bardzo interesujące, nie wiedziałem, że –

+0

@lazyberezovsky Tak, nie wiedziałem o tym także od czasu Tima Schmeltera [points] (http://stackoverflow.com/questions/17526239/converting-datetime-to-string/17526314 # comment25485437_17526239) tej sytuacji prawie miesiąc temu. –

+1

Dziękuję bardzo. Czasami nie muszę definiować formatów według kraju w tej specyfikacji. – Nigiri

7

Jak @Soner Gönül points out The / jest traktowana jako "separator dat" w custom format strings. Jeśli chcesz tylko zaakceptować / znaki, trzeba je uciec:

var format = new string[] { @"yyyy\/MM\/dd" }; 
+3

A @ proszę przed " – xanatos

+0

@xanatos - dobry połów. –