2014-10-30 5 views
1

Как часть моих unittests для приложения, я проверяю несколько строк datetime для их способности разбираться. Недавно я заметил, что на одной машине строка "0-02-20 11:36" может быть разобрана до {2000-02-20 11:36:00} по DateTime.TryParse(dateString, out parsedTimeStamp), а на других машинах - нет.DateTime.TryParse различные результаты

string dt = "0-02-20 11:36"; 
DateTime parsedTimeStamp; 
DateTime.TryParse(dateString, out parsedTimeStamp); 
Console.WriteLine(parsedTimeStamp); 
+5

И культура на этой конкретной машине был ... – Rotem

ответ

3

Разбор DateTime, как и все разбора в рамках, является культура зависит.

Я бы предположил, что на исключительной машине настройки культуры используют формат yyyy-MM-dd, а на других машинах формат даты - MM-dd-yyyy.

Чтобы обойти это, вы можете анализировать определенную культуру или использовать инвариантную культуру.

DateTime.TryParse(dateString, CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedTimeStamp); 

Оказывается, есть немало таких культур:

foreach (var c in CultureInfo.GetCultures(CultureTypes.AllCultures)) 
{ 
    if (c.DateTimeFormat.ShortDatePattern == "yyyy-MM-dd") 
    { 
     Console.WriteLine("{0}: {1}", c.DisplayName, c.DateTimeFormat.ShortDatePattern); 
    } 
} 

Korean: yyyy-MM-dd 
Polish: yyyy-MM-dd 
Albanian: yyyy-MM-dd 
Swedish: yyyy-MM-dd 
Khmer: yyyy-MM-dd 
Sinhala: yyyy-MM-dd 
Korean (Korea): yyyy-MM-dd 
Polish (Poland): yyyy-MM-dd 
Albanian (Albania): yyyy-MM-dd 
Swedish (Sweden): yyyy-MM-dd 
Khmer (Cambodia): yyyy-MM-dd 
Sinhala (Sri Lanka): yyyy-MM-dd 
Sami, Northern (Sweden): yyyy-MM-dd 
French (Canada): yyyy-MM-dd 
Sami, Lule (Sweden): yyyy-MM-dd 
Sami, Southern (Sweden): yyyy-MM-dd 
Sami (Southern): yyyy-MM-dd 
Sami (Lule): yyyy-MM-dd 
+0

@Sebastian Спасибо за редактирование. – Rotem

Смежные вопросы