Как заставить компоненты .NET WinForms использовать часовой пояс SET вместо часового пояса клиентов? - PullRequest
2 голосов
/ 19 января 2012

Я не собирался описывать эту проблему, пока не нашел другой веб-сайт форума с ТОЧНЫМ ЖЕ вопросом, на который мне нужно ответить (но без ответа.) Так что с благодарностью этому парню вот мой вопрос ...

У нас есть большое приложение Windows .Net (исполняемый файл winform), которое устанавливается на рабочий стол клиента. Это приложение вызывает веб услуги на сервере в другом часовом поясе. Практически все даты ориентированные компоненты обнаруживают разницу часовых поясов и автоматически скорректировать значения даты и времени (возвращаемые в наборах данных, сгенерированных SQL запросов), что обычно желательно в большинстве приложений, но вызывая проблемы с бухгалтерскими приложениями, связанными с датой не ориентированный на дату и время Нас интересует только часть «дата». Однако дата 01.01.2003 GMT-5 автоматически преобразуется в 31.12.2002 11:00 GMT-6 на клиенте. Вместо того, чтобы пройти через все код и извлечение UniversalTime, чтобы вернуться к 01.01.2003 для визуальные цели мы хотели бы просто "подделать" часовой пояс для исполняемый на стороне клиента, заставляя его думать, что он находится в том же часовом поясе, что и сервер.

Вопрос: Можем ли мы установить TimeZone программно для текущего только запущенный экземпляр, а не глобальные настройки?

Мне действительно нечего добавить, потому что это наша ТОЧНАЯ проблема. В нашем случае у нас есть ActiveReports, которые извлекают удаленные данные SQL в наборы данных и затем связывают отчет с набором данных. Так, например, дни рождения неправильны, потому что мы храним для них дату, а X часов вычитаем для даты в западных часовых поясах? Таким образом, даты рождения выключены на минус 1.

Есть мысли?

Спасибо!

Сет

1 Ответ

0 голосов
/ 19 января 2012

Способ решения этой проблемы - сериализация строковых представлений дат.

Реализации свойств для строковых дат выполняют соответствующее преобразование в и из фактических свойств даты.

Например:

    [NonSerialized]
    public DateTime MyDate { get; set; }

    [System.Xml.Serialization.XmlAttribute("MyDate")]
    public string MyDateString
    {
        get
        {
            if (MyDate.Equals(DateTime.MinValue))
            {
                return string.Empty;
            }
            else
            {
                return MyDate.ToShortDateString();
            }
        }
        set
        {
            DateTime dtTemp = DateTime.MinValue;
            if (DateTime.TryParse(value, out dtTemp))
            {
                MyDate = dtTemp;
            }
            else
            {
                MyDate = DateTime.MinValue;
            }
        }
    }
...