Вы должны указать, какую культуру вы хотите использовать при конвертации строки в дату.
Культура, которую вы должны использовать, зависит от того, в какую культуру отформатированы даты. Например, если все даты, которые вы анализируете, отформатированы как Словацкий :
String s = "24. 10. 2011";
Затем вам нужно разобрать строку, как если бы она была в Словацкой (Словакия) (sk-SK
) культуре:
//Bad:
d = DateTime.Parse(s);
//Good:
d = DateTime.Parse(s, CultureInfo.CreateSpecificCulture("sk-SK")); //Slovak (Slovakia)
Если все ваши даты в Таджикский (таджикская кириллица) , то вам нужно проанализировать его как tg-Cryl-Tj
:
String s = "24.10.11"
DateTime d = DateTime.Parse(s, CultureInfo.CreateSpecificCulture("tg-Cryl-Tj"));
Что приводит к вопросу: какой формат даты вы используете? Вы не должны полагаться на настройку локали сервера, вы должны решить, какой формат вы хотите.
//Bad
String s = d.ToString();
//Good
String s = d.ToString(CultureInfo.CreateSpecificCulture("si-LK")); //Sinhala (Sri Lanka)
//s = "2011-10-24 12:00:00 පෙ.ව."
Я подозреваю, что вы предпочитаете делать все на английском. Но тогда вы должны решить, какой вариант английского языка:
en-AU
(англ. Austrailia): 24/10/2011
en-IA
(английский, Индия): 24-10-2011
en-ZA
(английский, Южная Африка): 2011/10/24
en-US
(английский США): 10/24/2011
Я подозреваю, что вы предпочитаете Английский (Индия) (en-IA
).
Но если вы действительно не можете решить, какую культуру использовать при преобразовании дат в строки и наоборот, и даты никогда не предназначены для показа пользователю, тогда вы можете использовать Инвариантную культуру :
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