2016-07-18 6 views
2

문자열을 DateTime 개체로 변환하려고합니다. 내 문자열은 "2016 년 7 월 18 일"(날짜가 변경 될 수 있음) 형식입니다. 분명히 .Net은 유효한 날짜 형식으로 간주하지 않습니다. 제 3 자 라이브러리를 사용하지 않고 이것을 변환 할 수있는 쉬운 방법이 있습니까?DateTime으로 변환

+0

듯 = 대. 110) .aspx) 메서드? – Sidewinder94

+0

작동하지 않았습니다. –

+0

관련 항목 : http://stackoverflow.com/q/2058639/447156 –

답변

0

이 문제가 될 수 있기 때문에 내가 String.Replace를 사용하지 않을는 현재 문화의 달 이름을 바꿀려고 문자열을 포함합니다.

대신 당신은 문자열에서이 부분을 제거 할 수 있습니다 :

string input = "18th Jul 2016"; 
string[] token = input.Split(); // split by space, result is a string[] with three tokens 
token[0] = new string(token[0].TakeWhile(char.IsDigit).ToArray()); 
input = String.Join(" ", token); 
DateTime dt; 
if(DateTime.TryParseExact(input, "dd MMM yyyy", null, DateTimeStyles.None, out dt)) 
{ 
    Console.WriteLine("Date is: " + dt.ToLongDateString()); 
} 

현재 문화의 datetimeformat를 사용 nullTryParseExactIFormatProvider로 전달하는 경우. 영어 이름을 강제로 사용하려면 CultureInfo.InvariantCulture을 전달하면됩니다. 이 달을 편집하려고 나던 있도록

+0

'CultureInfo.CurrentCulture'는'CultureInfo.InvariantCulture'를 사용하는 것보다 낫습니다. –

+0

@Ghasan : 영어 이름을 강요하고 싶을 때 더 좋지는 않지만 _correct_;) 고마워요. –

0

해결 방법 :

string dateStr = "18th Jul 2016"; 
dateStr = dateStr.Replace("th", "").Replace("st", "").Replace("rd", "").Replace("nd", ""); 

DateTime date; 
if (DateTime.TryParseExact(dateStr, "dd MMM yyyy", CultureInfo.CurrentCulture, 
                DateTimeStyles.AssumeLocal, out date)) 
{ 

} 
else 
{ 
    // error 
} 
+2

"nd" – LordWilmore

+2

대체 방법은 현지화 문제에 취약하며 일부 국가에서는 'st','nd','th' 또는 그 달의 이름으로'rd'. –

+0

이 솔루션은 내 코드가 현지화 문제를 예상하지 않는 내부 시스템에서 실행되도록되어있어 입력이 항상이 형식으로 표시되기 때문에 문제가없는 것처럼 보입니다. 도와 주셔서 감사합니다! –

0

그것은 퍼지의 비트하지만

string result = System.Text.RegularExpressions.Regex.Replace(dt, "[st|th|nd|rd]{2} ", " ", System.Text.RegularExpressions.RegexOptions.IgnoreCase); 
DateTime d = DateTime.Parse(result); 

은 내가 [0-9] {1,2}으로 시작과 함께 교체 않았다 .. 공간을 포함 수는 있지만, 그건 당신이 (https://msdn.microsoft.com/en-us/library/w2sa9yss (V에서 [()``DateTime.ParseExact]을 확인 했 과잉

0
string dateString = "18th Jul 2016"; 
dateString = Regex.Replace(dateString, @"^(\d{2})(st|nd|rd|th)", "$1"); 
var result = DateTime.ParseExact(dateString, "dd MMM yyyy", CultureInfo.InvariantCulture);