2015-01-23 3 views
3

WebService "1.4.2013. 0:00:00"에서 다음 문자열을 받았습니다. DateTime 개체를 string에서 가져오고 싶습니다. 내가 지금까지 시도 무엇 : 그것은크로아티아어 구문 분석 날짜 문자열을 날짜 시간으로

문자열이 유효한 날짜 시간 문자열로 인식되지 않는다는 것을 알려줍니다

string d = "1.4.2013. 00:00:00"; 
DateTime parsed = DateTime.ParseExact(d, "d",CultureInfo.CreateSpecificCulture("hr-HR")); 

DateTime parsed = DateTime.ParseExact(d, "d",new CultureInfo("hr-HR")); 
DateTime parsed = DateTime.ParseExact(d, "d", CultureInfo.InvariantCulture); 

.

문자열 분석없이이 문제를 해결하려면 예 : 올해 이후에 점을 제거하십시오.

답변

7

The "d" standard format specifier은 제공된 문화권 ShortDatePattern을 사용합니다. DateTime.ParseExact을 사용하므로 형식 및 문자열은 과 정확히 일치해야합니다.

그러나 hr-HR 문화권의 ShortDatePattern 패턴은 d.M.yyyy.이며 분명히이 문자열과 일치하지 않습니다. InvariantCulture과 일치하지 않습니다.

그러나이 형식은 hr-HR 문화권의 표준 날짜 및 시간 형식이므로 DateTime.Parse을 직접 사용할 수 있습니다.

string d = "1.4.2013. 00:00:00"; 
DateTime parsed = DateTime.Parse(d, CultureInfo.GetCultureInfo("hr-HR")); 
// 01/04/2013 00:00:00 

귀하의 문자열이 d.M.yyyy. H:mm:ssShortDatePatternLongTimePattern 특성의 조합을 기반으로 hr-HR 문화의 The "G" standard format specifier 일치합니다.

+0

DateTime.ParseExact (D, "DM을 yyyy HH : mm : ss ", CultureInfo.InvariantCulture) 이 내 문제를 해결하지만 답은 맞지만 DotNet 3.5에서는 (점)을 보지 못합니다. hr-HR CultureInfo에 대한 년 이후. 어쨌든 고마워! – Riste

1

형식 지정자로 G을 사용해야합니다. "G"표준 형식 지정자는 짧은 날짜 ("d")와 긴 시간 ("T") 패턴의 조합을 공백으로 구분하여 나타냅니다.

더 많은 정보 here

string d = "1.4.2013. 00:00:00"; 
DateTime parsed = DateTime.ParseExact(d, "G",new CultureInfo("hr-HR")); 
1

다음 작업을해야합니다 :

string date = "1.4.2013. 00:00:00"; 
var ci = CultureInfo.CreateSpecificCulture("hr-HR"); 

DateTime parsed = DateTime.Parse(date, ci); 

네르 말했듯이, 당신은 therfore 언제든지 정보를 포함하지 않는 간단한 날짜 패턴의 ParseExact을 사용하려 실패합니다. Parse을 사용하면 메소드가 사용할 형식을 파악할 수 있습니다.

당신은 당신이 다음 (상당) 문 중 하나를 사용할 수 있습니다 ParseExact (performance reasons에 대한 예를) 사용하려면 :

DateTime parsed = DateTime.ParseExact(date, "d.M.yyyy. HH:mm:ss", ci); 

또는

DateTime parsed = DateTime.ParseExact(date, "G", ci);