2016-06-27 4 views
1

나는 문제가 Umm al-Qura 달력에서 datetime의 작동 방식에 대한 이해가 부족하거나 버그인지 여부가 확실하지 않습니다.아라비아 문화 datetime 파싱이 예상 값을 반환하지 않음

기본적으로 내부 유틸리티 클래스가 현재 문화권에 관계없이 값을 올바르게 구문 분석 할 수 있도록 테스트를 작성하고 있습니다.

아래 코드에서 목표는 dt1dt2과 같습니다.

public void ArabicTesting() 
    { 
     CultureInfo culture = new CultureInfo("ar"); 

     // Initialize a new datetime (04/01/2048 06:21:01 AM) 
     DateTime dt1 = new DateTime(2048, 4, 1, 6, 21, 1); 

     // Convert the datetime to a string using arabic cultureinfo 
     // string ends up being "17/06/70 06:21:01 ص," 
     string dt2_string = $"{dt1.ToString(culture.DateTimeFormat.ShortDatePattern)} {dt1.ToString(culture.DateTimeFormat.LongTimePattern)}"; 

     // Parse the string 
     DateTime dt2; 
     DateTime.TryParse(dt2_string, culture, DateTimeStyles.None, out dt2); 
    } 

문제는 DateTime.TryParse가 동일하게 나타나는 날짜에 문자열로 날짜를 구문 분석된다이지만, 예상되는 것보다 다른 값을 가지고있다. 여기

은 무슨 일이 일어나고 있는지의 스크린 샷의 커플 : 당신이 모두 DT1DT2 미리 값을 보면

dt1 dt2

이 나타나는 동일한 "17/06/70 06:21:01 ص, ", 그러나 개체의 실제 값은 완전히 다릅니다.

누구나 이것이 MS 버그인지 알 수 있습니까? 아니면 DateTime.TryParse 메서드에 올바른 문자열 값을 전달하지 않았기 때문입니까?

+1

'ShortDatePattern'대신 'LongDatePattern'을 사용하면 어떻게됩니까? 'dt1.ToString (culture.DateTimeFormat.LongDatePattern)} {dt1.ToString (culture.DateTimeFormat.LongTimePattern)} "; ' – Igor

+0

@Igor이 시나리오에서 작동했습니다. - 감사합니다. 나는 여전히 조금 걱정하고 있는데, DateTime의 기본 ToString 메서드가 다른 날짜에 대해 동일한 값을 반환한다는 것이 문제인 것처럼 보입니다. 아랍 문화에서 짧은 날짜 패턴을 사용하는 것이 표준이되어서는 안됩니다. – user2338408

답변

1

전체 날짜가 캡처되었는지 확인하려면 ShortDatePattern 대신 LongDatePattern을 사용해보십시오. ShortDatePattern 다음 기본값이 잘못 같은 년 전체 (예)로 구문 분석 방법으로 가정 할 수있을 수있는 날짜 부분을 생략 할 수 있기 때문에 2의

string dt2_string = $"{dt1.ToString(culture.DateTimeFormat.LongDatePattern)} {dt1.ToString(culture.DateTimeFormat.LongTimePattern)}"; 

결과는이에 따라 다를 수 있습니다. 어떤 부분은 가정 된 문화에 따라 다르며 다른 문화는 아랍어와 같이 문제가있을 수 있습니다.

이 특별한 경우에 왜 이런 일이 발생했는지 디버그하려면 dt1.ToString(culture.DateTimeFormat.LongDatePattern)dt1.ToString(culture.DateTimeFormat.ShortDatePattern)의 2 개의 문자열을 비교하여 런타임의 현재 날짜/시간의 기본값으로 대체 할 수있는 부분을 확인하십시오.

+0

영어 문화에도 그럴 것 같지만 (예 : 06/27/16) 그와 같은 경우에도, 하나 이상의 날짜를 나타낼 수있는 날짜를 작성하는 패턴이 존재한다는 것은 반 직관적 인 것처럼 보입니다. 나는 왜이 문제가 지금 일어나고 있는지 쉽게 볼 수있다. 확실히 알아두면 좋을 것입니다. 도와 주셔서 감사합니다! – user2338408