2013-02-07 4 views
0

실제로 미국에있는 DB2 데이터베이스에 문자열이 있습니다. 나는 2011 년 12 월 31 일 12시 1 분을 나타내는 '2011-12-31 00:00:00'문자열을 열 값으로 설정했습니다.DateTime 구문 분석 .Net 3.5

영국에서 실행중인 클라이언트 프로그램에서이를 문자열로 가져오고 있으며 UI는 로컬 문화권 (기본값)으로 설정되어 있습니다. 내 고객 프로그램은 또한 미국과 홍콩에서 운영되며, 문화는 미국과 홍콩에서 각각 지역 문화로 설정됩니다.

다음 코드를 사용하여 문자열을 datetime으로 구문 분석하고 있습니다. 나는 이것이 잘 될지 잘 모르겠다. 나는 그 방향으로 나를 가리키는 좋은 링크를 찾을 수 없었다. 이 문화가 다양한 문화권에서 효과가 있을지, 왜 그런지 말해 주시겠습니까?

string quarterStartDate = "2011-12-01 00:00:00"; 
DateTime quarterStart; 
DateTime.TryParse(quarterStartDate, CultureInfo.InvariantCulture, DateTimeStyles.None, out quarterStart); 
return quarterStart; 

은 내 요구 사항에 따라 작동하는 검사를하지만, 다시는 UI가 다른 나라에서 실행하려고하면 작동 여부도 확실하지 않다 '.

string quarterStarter = "2011-12-01 00:00:00";   
    DateTime quarterStart; 
    DateTime.TryParse(quarterStarter,CultureInfo.InvariantCulture,DateTimeStyles.None,out quarterStart);  
    Assert.IsTrue(quarterStart.Year == 2011); 
    Assert.IsTrue(quarterStart.Month == 12); 
    Assert.IsTrue(quarterStart.Day == 1); 

답변

2

난 강력하게 당신이 사전에 형식을 알고, 당신은 TryParseExact 대신 TryParse으로 사용하는 것이 좋습니다 것입니다 : 당신이 이 있다고 확인 TryParseExact의 반환 값을 확인해야합니다

bool success = DateTime.TryParseExact(quarterStarter, "yyyy-MM-dd HH:mm:ss", 
             CultureInfo.InvariantCulture, 
             DateTimeStyles.None, 
             out quarterStart); 

주 올바르게 파싱되었습니다. 예외가 발생해도 괜찮 으면 ParseExact을 대신 사용하십시오.

기존 코드가 잘 작동 할 수 있습니다. 결국 불변의 문화권을 제공하고있는 것입니다.하지만 형식을 지정하면 실제로 예상 한 내용이 명확 해지며 값 예상치 못한 형식으로 제공됩니다.

1

당신은 예를 들어, 날짜를 당겨 ParseExact를 사용할 수 있습니다

var s = "2011-12-01 00:00:00"; 
var dt = DateTime.ParseExact(s,"yyyy-MM-dd HH:mm:ss",CultureInfo.InvariantCulture); 
1

당신은 문화 변화하지 않는 특정 형식을 설정할 수 있습니다.

DateTime dt; 
DateTime.TryParseExact(dateTime, 
         "yyyy-MM-dd hh:mm tt", 
         CultureInfo.InvariantCulture, 
         DateTimeStyles.None, 
         out dt); 
+0

형식 문자열이 제시된 데이터와 일치하지 않습니다. –