2011-10-10 5 views
1

내 응용 프로그램이 시간을내어 문자열로 서식을 지정하고 ParseExact를 사용하여 유효한 DateTime 값으로 다시 구문 분석합니다. 자세한 내용은 아래를 참조하십시오.DateTime - 다른 구분 기호 문자를 어떻게 처리 할 수 ​​있습니까?

DateTime dt = DateTime.Now; 
      DateTime timeNow = DateTime.Now; 

      string timeStamp = dt.ToString("MM/dd/yyyy HH:mm:ss"); 


      // To match different countries 
      if (timeStamp.IndexOf("/") > -1) 
      { 
       timeNow = DateTime.ParseExact(timeStamp, "MM/dd/yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture); 
      } 
      else if (timeStamp.IndexOf(".") > -1) 
      { 
       timeNow = DateTime.ParseExact(timeStamp, "MM.dd.yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture); 
     } 

다른 국가에서는 다른 날짜 형식을 사용합니다. 나타나는 각 응용 프로그램에 대해 조건을 작성하지 않고 내 응용 프로그램이 자동으로 다른 형식을 고려하도록 만드는 방법이 있습니까? 지원하려는 어떠한 도움을

감사합니다,

에반

+1

약 1/20/2011? 미국은 1 월처럼 스페인이 2 월과 같이 분석 할 것이라고 분석 할 것입니다. –

+0

이것은 내가 걱정하는 것입니다 ... –

+0

그래, 모든 날짜를 일반적인 형식으로 "표준화"해야한다고 생각합니다. 그래서 모든 것이 같은 수준에 있습니다. 이것이 불가능할 경우 응용 프로그램 설계를 다시 생각하십시오. 1980 년 1 월 1 일 이후로 모든 것을 내부적으로 저장하고 DateTime 클래스를 사용하여 날짜를 구문 분석하고 표시 할 수 있습니다. –

답변

0

당신은 많은 형식과 형식 지정의 배열을 전달할 수 있습니다. 응용 프로그램이 문자열 표현을 사용하는 경우

string timestamp = dt.ToString("MM/dd/yyyy HH:mm:ss", 
           CultureInfo.InvariantCulture); 
+0

나는 두 가지 모두를 좋아한다. 나는 기회가 생길 때 그들을 밖으로 시도 할 것이다. –

1

그러나

string[] formats = new [] { "MM/dd/yyyy HH:mm:ss", "MM.dd.yyyy HH:mm:ss" };  
DateTime d = DateTime.ParseExact 
         (
         timestamp, formats, 
         CultureInfo.InvariantCulture,       
         DateTimeStyles.None); 

, 당신이 문자열을 직접 생성하는 말을하기 때문에, 당신은 왜 당신이 항상 InvariantCulture를 사용하여 서식을 확인하지 않습니다 내부적으로는 출력 할 때 Sortable format specifier을 사용하는 것이 좋습니다. 그렇게하면 ParseExact"s" 형식 지정자를 사용하여 다시 읽을 수 있다는 것을 항상 알고 있습니다.

다른 형식으로 날짜를 출력해야하는 경우는 사용자에게 표시해야하거나 다른 프로그램에서 특정 형식으로 표시해야하는 경우입니다.

@Mike Christensen은 자신의 의견에서 지적했듯이 다른 로케일은 날짜를 다르게 해석합니다. 많은 유럽 국가의 기본 출력은 DD/MM/YYYY이지만 미국의 경우 일반적으로 MM/DD/YYYY입니다. 다른 로케일을 고려하면 모호한 점이 있습니다.

관련 문제