C# DateTimeInvalidLocalFormat - Как установить часовой пояс в UTC

Я работаю в интеграции EasyPost, делающей библиотеку классов, чтобы упростить использование их API, и я получаю эту ошибку:

Managed Debugging Assistant 'DateTimeInvalidLocalFormat' has detected a problem in 'C:\Projects\TestClient.vshost.exe'.

Additional information: A UTC DateTime is being converted to text in a format that is only correct for local times. This can happen when calling DateTime.ToString using the 'z' format specifier, which will include a local time zone offset in the output. In that case, either use the 'Z' format specifier, which designates a UTC time, or use the 'o' format string, which is the recommended way to persist a DateTime in text. This can also occur when passing a DateTime to be serialized by XmlConvert or DataSet. If using XmlConvert.ToString, pass in XmlDateTimeSerializationMode.RoundtripKind to serialize correctly. If using DataSet, set the DateTimeMode on the DataColumn object to DataSetDateTime.Utc.

Я получаю эту ошибку, когда звоню Create метод в EasyPost Shipment объект. Код ниже:

Shipment shipment = new Shipment() {
  to_address = toAddress,
  from_address = fromAddress,
  parcel = parcel
};

shipment.Create();

Эта функция создания, вероятно, вызывает их REST API и пытается преобразовать ответ json в одну из своих моделей.

Чтобы устранить ошибку, я пытаюсь установить UTC как значение по умолчанию для моей библиотеки, поэтому всякий раз, когда я использую DateTime.ToString() Я использую DateTime.ToString("o"), Я не знаю, решит ли это на самом деле проблему, но я не знаю, как ее форсировать (используйте UTC в качестве библиотеки по умолчанию). Я попробовал кусок кода ниже, но он не работает

CultureInfo newCulture = CultureInfo.InvariantCulture;
Thread.CurrentThread.CurrentCulture = newCulture;

Вы можете мне помочь?

1 ответ

Я один из разработчиков клиентских библиотек EasyPost.

Насколько я могу найти в некоторых фундаментальных исследованиях, нет (простого) способа установить часовой пояс по умолчанию для приложения C#. Большинство сообщений в блогах и других ответов SO , которые я нашел, предлагают использовать служебные функции для преобразования объекта даты и времени UTC в локальный объект даты и времени при попытке отобразить его в строку.

API EasyPost возвращает все даты и время в формате UTC + информация о часовом поясе (например,2022-10-24T12:37:24-06:00), который учитывается при десериализации JSON в объект DateTime в клиентской библиотеке C#.

Другие вопросы по тегам