다음과 같은 작업을 수행하려고 할 때 System.FormatException
이 발생합니다(예시):
TimeSpan ts = XmlConvert.ToTimeSpan("P72H");
ISO8601 표준](http://en.wikipedia.org/wiki/ISO_8601#Dates)을 조사해 보니 맞는 것 같지만, 어떤 작업을 수행해도 예외를 던지지 않고 시간을 구문 분석할 수 없습니다.
고마워요!
편집:
예외 세부 정보:
System.FormatException was unhandled by user code
HResult=-2146233033
Message=The string 'P72H' is not a valid TimeSpan value.
Source=System.Xml
문자열에 시간 구분 기호를 추가해야 합니다. 이렇게 해보세요:
TimeSpan ts = XmlConvert.ToTimeSpan("PT72H");
기간 사양 참조 - http://www.w3.org/TR/xmlschema-2/#duration
3.2.6.1 어휘 표현 기간에 대한 어휘 표현은 [ISO 8601] 확장 형식인 PnYn MnDTnH nMnS이며, 여기서 nY는 연도, nM은 월, nD는 일, 'T' 는 날짜/시간 구분자, nH는 시간, nM은 분, nS는 초를 나타냅니다. 초 수에는 소수점 이하 자릿수부터 임의의 정밀도까지 포함할 수 있습니다.
댓글에 따라 수정/업데이트하기
'W'가 ISO 8601 표준의 일부이기 때문에 'P2M2W5D' 문자열이 유효한 'TimeSpan'으로 간주되지 않는 이유에 대한 질문이 있었기 때문에 이 업데이트를 추가하여 누군가가 이 문제를 발견할 경우 답을 얻기 위해 댓글을 읽지 않아도 되도록 하고 싶었습니다. 문제의 원본 문자열인 P72H
와 P2M2W5D
의 문제는 모두 해당 문자열이 W3C XML 스키마를 준수해야 한다는 것입니다(XmlConvert.ToTimeSpan 문서 참조). W3C XML 스키마(위 링크)를 살펴보면 ISO 8601 표준, 특히 섹션 5.5.3.2.1을 다시 참조하여 W
가 XML 스키마에서 유효한 문자가 아닌 이유를 설명합니다:
주에는 정의 된 이월 지점 (52 또는 53)이 없으므로 주는 다음과 같아야합니다.
이러한 응용 프로그램에서 사용하지 마십시오.
System.Xml.XmlConvert.ToTimeSpan("PnYnMnDTnHnMnS")에 다음 형식을 사용하세요. <br/> <br/> P - 지정자는 날짜 형식 앞에 와야 합니다. <br/><br/> nY - 연도(예: 2Y<br/>); nM - 개월 수(예: 4M<br/>); nD - 일 수, 예: 6D<br/> <br/> T - 시간 형식 앞에 반드시 입력해야 하는 지정자<br/><br/> nH - 시간 수(예: 8H<br/>); nM - 분 수 예: 12M<br/> nS - 초 수(예: 14S<br/>); <br/>
System.Xml.XmlConvert.ToTimeSpan("P2Y4M6DT8H14M18S")`
여기서 월과 분과 혼동되는 부분은 표시하는 문자는 같지만 지정자 사용법을 통해 쉽게 이해할 수 있도록 구분했습니다.