메모
이 문서는 .NET Framework와 관련이 있습니다. .NET 6 이상 버전을 포함하여 .NET의 최신 구현에는 적용되지 않습니다.
dateTimeInvalidLocalFormat MDA는 UTC(Universal Coordinated Time)로 저장된 인스턴스가 로컬 DateTime 인스턴스에만 사용되는 형식을 사용하여 포맷될 때 DateTime 활성화됩니다. 이 MDA는 지정되지 않은 인스턴스 또는 기본 DateTime 인스턴스에 대해 활성화되지 않습니다.
증상
애플리케이션은 로컬 형식을 사용하여 UTC DateTime 인스턴스를 수동으로 직렬화합니다.
DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffzzz"));
원인
메서드의 DateTime.ToString 'z' 형식에는 현지 표준 시간대 오프셋(예: 시드니 시간의 경우 "+10:00")이 포함됩니다. 따라서 값 DateTime 이 로컬인 경우에만 의미 있는 결과를 생성합니다. 값이 UTC 시간 DateTime.ToString 인 경우 현지 표준 시간대 오프셋을 포함하지만 표준 시간대 지정자를 표시하거나 조정하지는 않습니다.
해결 방법
UTC DateTime 인스턴스는 UTC임을 나타내는 방식으로 형식을 지정해야 합니다. UTC 시간을 나타내는 데 'Z'를 사용하는 UTC 시간에 권장되는 형식입니다.
DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffZ"));
인스턴스가 로컬인지, UTC인지, 지정되지 않았는지에 관계없이 올바르게 직렬화하는 속성을 직 Kind 렬화하는 DateTime "o" 형식도 있습니다.
DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("o"));
런타임에 미치는 영향
이 MDA는 런타임에 영향을 주지 않습니다.
출력
이 MDA 활성화의 결과로 특별한 출력은 없습니다. 그러나 호출 스택을 사용하여 MDA를 활성화한 호출의 ToString 위치를 확인할 수 있습니다.
Configuration
<mdaConfig>
<assistants>
<dateTimeInvalidLocalFormat />
</assistants>
</mdaConfig>
예시
다음과 같은 방식으로 또는 DataSet 클래스를 사용하여 XmlConvert UTC DateTime 값을 간접적으로 직렬화하는 애플리케이션을 고려합니다.
DateTime myDateTime = DateTime.UtcNow;
String serialized = XMLConvert.ToString(myDateTime);
직렬화 및 DataSet serialization은 XmlConvert 기본적으로 serialization에 로컬 형식을 사용합니다. UTC와 같은 다른 종류의 DateTime 값을 직렬화하려면 추가 옵션이 필요합니다.
이 특정 예제의 XmlDateTimeSerializationMode.RoundtripKind 경우 호출에 ToString 전달합니다 XmlConvert. 이렇게 하면 데이터를 UTC 시간으로 직렬화합니다.
개체를 DataSet사용하는 경우 개체Utc의 DateTimeMode 속성을 DataColumn .로 설정합니다.
DateTime myDateTime = DateTime.UtcNow;
String serialized = XmlConvert.ToString(myDateTime,
XmlDateTimeSerializationMode.RoundtripKind);
참고하십시오
.NET