У меня возникла проблема, когда мой сервер ожидает объектов datetime в формате GMT, и мое приложение UI всегда создает и обрабатывает все объекты datetime в соответствии с локальной культурой. Я не могу изменить культуру, поскольку существуют другие функции, которым нужны объекты datetime. в соответствии с местным форматом. Я написал для этого конвертер, не уверенный, есть ли у меня полка api, которая позволяет мне это делать. Также немного запутался в методе GetUtcOffset на timezoneinfo, даёт ли разница между местным временем и временем gmt? документация, доступная на msdn, была немного критической для меня. Пожалуйста, можете ли вы помочь? Также как я могу ее протестировать, изменив культуру и проверив вывод?TimeZoneInfo | GetUtcOffset: лучшее решение?
Этот класс преобразует объекты времени даты в эквивалент времени GMT, а также преобразует его обратно при приеме с сервера.
Примечание. Как мой сервер, так и пользовательский интерфейс работают в режиме CET, однако эти объекты datetime являются специфическими для Великобритании и, следовательно, серверу требуется их в GMT.
public class GmtConverter : IDateConverter
{
private readonly TimeZoneInfo timeZoneInfo;
public GmtConverter()
: this(TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"))
{
}
public GmtConverter(TimeZoneInfo timeZoneInfo)
{
this.timeZoneInfo = timeZoneInfo;
}
public DateTime Convert(DateTime localDate)
{
var utcOffset = timeZoneInfo.GetUtcOffset(localDate);
var unSpecified = localDate + utcOffset;
return DateTime.SpecifyKind(unSpecified, DateTimeKind.Unspecified);
}
public DateTime ConvertBack(object local)
{
var localDate = (DateTime) local;
var utcOffset = timeZoneInfo.GetUtcOffset(localDate);
var unSpecified = localDate - utcOffset;
return DateTime.SpecifyKind(unSpecified, DateTimeKind.Unspecified);
}
}
Связанные вопрос: http://stackoverflow.com/questions/2532729/daylight-saving-time и-часовой пояс, передовая практика, – Oded