Как контролировать форматирование часового пояса в System.Xml.Serialization или во время выполнения приложения? - PullRequest
3 голосов
/ 30 мая 2010

Я занимаюсь разработкой приложения на C # .Net, которое выполняется в системе, расположенной в центральном часовом поясе. Приложение получает информацию от третьей стороны, используя API, который они предоставляют. Я использовал WSDL для создания кода, который позволяет моему приложению обращаться к API с помощью ... их API отчетов позволяет вам определять дату начала и дату окончания отчета. Это поля C # DateTime и XSD: dateTime. Теперь, когда я устанавливаю дату начала и даты окончания и позволяю API создавать сообщения SOAP, даты не всегда включают часовой пояс, если я не установил поля даты с помощью метода ToLocalTime; однако, метод создаст поля DateTime в центральном часовом поясе (CST), но мне нужно, чтобы он создал эти поля в тихоокеанском часовом поясе (PST). Если я установлю время моей машины на PST, все будет хорошо ... но, конечно, это вызывает другие проблемы со временем. Какие методы я могу использовать для управления форматированием DateTime? В качестве альтернативы, есть ли настройка приложения, которая может быть установлена ​​в C #, которая позволяет контролировать часовой пояс?

Ответы [ 2 ]

0 голосов
/ 30 мая 2010

Я думаю, у вас есть два варианта. Очевидно, что вы можете сделать, будет зависеть от того, как целевая система обрабатывает полученное время.

1 - преобразовать дату и время в целевой часовой пояс и отправить запрос без информации о часовом поясе. Это предполагает, что целевая система будет принимать дату и время, в которых нет информации о часовом поясе, как в часовом поясе PST.

2 - перейти на использование DateTimeOffset . Это позволит вам явно указать смещение часового пояса и будет сериализовано с указанной вами информацией о часовом поясе.

Если возможно, я бы выбрал вариант 2.

0 голосов
/ 30 мая 2010

Я думаю, вы сможете достичь этого, используя System.TimeZoneInfo . Например:

TimeZoneInfo.ConvertTime(myLocalTime, TimeZoneInfo.FindSystemTimeZoneById(“Pacific Standard Time”));
...