2012-07-23 5 views
2

현재 몇 분마다 웹에서 다운로드 한 XML에서 가져온 문자열을 구문 분석하려고합니다. 문자열은 다음과 같습니다문자열에서 DateTime을 구문 분석하는 데 문제가 있습니다.

Thu Jul 12 08:39:56 GMT+0100 2012 

을 처음에는 그냥 string.split을했고, 시간 (GMT+0100 2012) 후 모든 것을 꺼내서 일 이후 2012 삽입. 그래서 동적으로는 C#에서 나에게 해당 문자열을 전송로에 상관없이 GMT +를 pasre 싶습니다

Thu Jul 12 08:39:56 GMT+0000 2012 

: 날짜가 변경 될 때까지

큰했다.

모든 조언을 주시면 감사하겠습니다.

+1

? 스트립 타임 존 정보? 현지 시간으로 변환 하시겠습니까? – Arithmomaniac

+0

로컬 날짜로 파싱하고 DateTime 라이브러리에서 예 GMT + 0000처럼 GMT를 믿는 것 같지 않지만 뭔가 빠졌을 것 같습니다. 나는 확실히 (2012 년 7 월 12 일) –

+0

여러분의 도움에 감사드립니다! –

답변

5

당신은 custom date and time format stringDateTime.ParseExact을 사용할 수 있습니다 : 문자열 및 형식 문자열이 정확히 일치하지 않는 경우 DateTime.TryParseExact을 사용할 수 있습니다 그래서이 false이 경우 반환합니다

DateTime.ParseExact("Thu Jul 12 08:39:56 GMT+0000 2012", 
        "ddd MMM dd hh:mm:ss 'GMT'K yyyy", 
        CultureInfo.InvariantCulture) 

이 형식의 예외가 발생합니다 실패합니다. 응용 프로그램에 중요 할 수도 있습니다 -

대신 DateTime 당신은 @Keithcommented 같은 시간대 정보를 보존 DateTimeOffset을 사용할 수 있습니다.

+0

예. 정확히 GMT + 0000이 GMT + 0100으로 변경됩니다 ..이 앱이 지난 2012 년을 실행 한 경우 2012 년이 변경됩니다. 다음은 내가 읽은 날짜 문자열의 출처입니다. https : //s3-eu-west-1.amazonaws.com/olympics-outdoor/xml/images.xml –

+0

@KeithS - 네, 그 문제를 직접 때 렸습니다. 몇 개의 다른 문자열을 테스트하고'GMT '를 리터럴로 이스케이프했다. 콜론은 없지만'zzzz'와'K'는 잘 처리됩니다. – Oded

+0

@Oded : 달콤한. 좋아, 그럼 좋은 대답; 내가 추천하는 것만 다른 것은 아마도 로컬 또는 UTC로 직접 변환하는 대신 명시된 시간대에서 시간을 보존하는 DateTimeOffset으로 파싱하는 것입니다. – KeithS

0

날짜를 구문 분석하는 방법을 DateTime.Parse 시도하십시오.

+0

OP가 작동하지 않는 예제를 사용하면 다음과 같은 메시지가 나타납니다. "문자열이 유효한 DateTime으로 인식되지 않았습니다." 바닐라'DateTime.Parse'. – Oded

+0

DateTime.Parse는 주어진 문자열로 실패합니다. 위의 내 의견을 참조하십시오. 2012 년 7 월 12 일 이후에 끝나야합니다. 또한 그것이 GMT + 0000을 좋아하지 않는 것 같습니다. –

1

두 가지 작업을 수행 할 수 있습니다. 첫째, 사용자 정의 형식 문자열을 DateTime 또는 DateTimeOffset에서 ParseExact 메서드와 함께 사용할 수 있어야합니다 (스탬프의 실제 표준 시간대가 중요 할 경우 DateTimeOffset을 사용합니다. UTC 또는 현지 표준 시간대와 동등한 시간). DateTime custom format string

형식 문자열 아마 @"ddd MMM dd HH:mm:ss 'GMT'zzzz yyyy"과 같이 될 것이다 :

은 보라.

그러나 한 가지 문제가 있습니다. .NET 표준 시간대 오프셋 ("zzzz"또는 간단히 "K")에는 입력 문자열에없는 문자열로 표시 될 때 항상시와 분 사이에 콜론이 포함됩니다. 표준 시간대 오프셋이 콜론을 가지지 않아야한다고 지정하는 방법이 없습니다. 콜론없이 구문 분석하려고하면 오류가 발생할 것이라고 확신합니다.

가장 간단한 해결 방법은 구문 분석하기 전에 문자열에서 특정 콜론을 제거하는 것입니다. 그 주어진 귀하의 의견에 대한 코드는 문자열의 마지막 콜론 문자를 제거하는 것입니다 :

var updatedString = inputString.Remove(inputString.LastIndexOf(':'), 1); 
0

이 작동합니다 :

XmlConvert.ToDateTime(textBox1.Text, "ddd MMM dd HH:mm:ss 'GMT'zzzz yyyy"); 
정확하게 당신이이 날짜로 일을하려고하는 무엇
관련 문제