2014-10-30 2 views
1

응용 프로그램에 대한 내 unittest의 일부로 나는 구문 분석 할 수있는 몇 가지 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 인 것으로 가정합니다.

이 문제를 해결하려면 특정 문화권에서 또는 불변하는 문화권을 사용하여 구문 분석 할 수 있습니다. 대한

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 감사 :

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

그것은 이러한 문화의 상당수가 밝혀 편집. – Rotem