Powinieneś określać, jakiej kultury chcesz użyć, gdy konwertujesz ciąg znaków na datę.
Kultura, której należy używać, zależy od kultury, z której daty są sformatowane.Na przykład, jeśli wszystkie terminy jesteś analizowania są sformatowane jako słowacki:
String s = "24. 10. 2011";
Następnie trzeba analizować ciąg jakby to było w Słowackiej (Słowacja) (sk-SK
) kultura:
//Bad:
d = DateTime.Parse(s);
//Good:
d = DateTime.Parse(s, CultureInfo.CreateSpecificCulture("sk-SK")); //Slovak (Slovakia)
Jeśli daty są w tadżycki (Tadżykistan cyrylica), to trzeba przeanalizować go jako tg-Cryl-Tj
:
String s = "24.10.11"
DateTime d = DateTime.Parse(s, CultureInfo.CreateSpecificCulture("tg-Cryl-Tj"));
Co prowadzi do pytania: z jakiego formatu daty korzystasz? Nie powinieneś polegać na ustawieniach regionalnych serwera, powinieneś decydować, jaki format chcesz.
//Bad
String s = d.ToString();
//Good
String s = d.ToString(CultureInfo.CreateSpecificCulture("si-LK")); //Sinhala (Sri Lanka)
//s = "2011-10-24 12:00:00 පෙ.ව."
Podejrzewam, że wolisz robić wszystko po angielsku. Ale wtedy trzeba zdecydować, który wariant angielski:
en-AU
(English Austrailia): 24/10/2011
en-IA
(angielski Indie): 24-10-2011
en-ZA
(angielski Republika Południowej Afryki): 2011/10/24
en-US
(Angielski Stany Zjednoczone): 10/24/2011
Podejrzewam cię preferuj angielski (Indie) (en-IA
).
Ale jeśli naprawdę nie może zdecydować, co kultura używać podczas konwersji daty, aby ciągi i vice versa, a terminy nie mają być wyświetlane użytkownikowi, a następnie można użyć Inwariant Kultura:
String s = "10/24/2011" //invariant culture formatted date
d = DateTime.Parse(s, CultureInfo.InvariantCulture); //parse invariant culture date
s = d.ToString(CultureInfo.InvariantCulture); //convert to invariant culture string
do osoby, którzy głosowali, aby zamknąć ponieważ „trudno powiedzieć co jest proszony jest tutaj”: co jest mylące, prawda? –