Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Замечание
Эта статья относится к .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.
dateTimeInvalidLocalFormat MDA активируется, если DateTime экземпляр, хранящийся как универсальное время координированного времени (UTC), форматируется с помощью формата, который предназначен для использования только для локальных DateTime экземпляров. Этот MDA не активируется для неопределенных или стандартных DateTime экземпляров.
Симптом
Приложение выполняет сериализацию экземпляра UTC DateTime вручную с помощью локального формата:
DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffzzz"));
Причина
Формат "z" для метода включает смещение локального часового пояса DateTime.ToString , например "+10:00" для сиднейского времени. Таким образом, он будет производить только значимый результат, если значение локального DateTime . Если значение — время UTC, DateTime.ToString включает смещение локального часового пояса, но оно не отображает или не настраивает описатель часового пояса.
Резолюция
Экземпляры UTC DateTime должны быть отформатированы таким образом, что они имеют формат UTC. Рекомендуемый формат для времени UTC для обозначения времени UTC:
DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffZ"));
Существует также формат O, который сериализует DateTime использование Kind свойства, которое сериализуется правильно независимо от того, является ли экземпляр локальным, UTC или не указано:
DateTime myDateTime = DateTime.UtcNow;
Serialize(myDateTime.ToString("o"));
Влияние на среду выполнения
Этот MDA не влияет на среду выполнения.
Выходные данные
В результате активации MDA нет специальных выходных данных. Однако стек вызовов можно использовать для определения расположения ToString вызова, активировающего MDA.
Конфигурация
<mdaConfig>
<assistants>
<dateTimeInvalidLocalFormat />
</assistants>
</mdaConfig>
Пример
Рассмотрим приложение, которое косвенно сериализует значение UTC DateTime с помощью XmlConvert или DataSet класса, следующим образом.
DateTime myDateTime = DateTime.UtcNow;
String serialized = XMLConvert.ToString(myDateTime);
DataSet Сериализация XmlConvert используют локальные форматы для сериализации по умолчанию. Для сериализации других типов значений, таких DateTime как UTC, требуются дополнительные параметры.
В этом конкретном примере передайте XmlDateTimeSerializationMode.RoundtripKindToString вызов XmlConvert. Это сериализует данные в формате UTC.
При использовании DataSetсвойства задайте DateTimeModeDataColumn для объекта значение Utc.
DateTime myDateTime = DateTime.UtcNow;
String serialized = XmlConvert.ToString(myDateTime,
XmlDateTimeSerializationMode.RoundtripKind);