Как установить часовой пояс клиента равным приложению окна часового пояса сервера .Net C # - PullRequest
1 голос
/ 09 января 2009

My Client Application Получает данные через WebService с удаленного сервера. Приложение в основном написано в Windows Framework 1.1 Framework.

Все, что я хочу сделать, это установить для моего клиентского приложения TimeZone значение Server TimeZone, чтобы можно было избежать любых расхождений, связанных с датой и временем.

Для этого я хотел бы знать, как получить часовой пояс сервера и как установить часовой пояс клиента равным серверу.

Ответы [ 4 ]

1 голос
/ 06 февраля 2009

Я не знаю, в чем именно ваша проблема, у нас была похожая проблема в нашем приложении. При отправке datetime с сервера на клиент в разных часовых поясах, когда клиент получает datetime, он может преобразовать его в местное время. Я не мог найти решение для этого в .net 1.1. Но в .Net 2.0 и далее DateTime имеет свойство, называемое Kind , и если вы установите его значение на Unspecified , клиент не преобразует время, полученное с сервера, в местное время.

1 голос
/ 09 января 2009

Если вы используете UTC с обеих сторон, вам не нужно беспокоиться о различиях смещений. Для отображения в вашем приложении вы можете конвертировать даты UTC в местное время.

0 голосов
/ 03 декабря 2009

если вы используете .NET Framework 3.5, вы можете использовать класс TimeZoneInfo для получения информации о часовом поясе ...

// Get time in local time zone 
DateTime thisTime = DateTime.Now;
Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(thisTime) ?
                  TimeZoneInfo.Local.DaylightName : TimeZoneInfo.Local.StandardName, thisTime);
Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local));
// Get Tokyo Standard Time zone
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);      
Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(tstTime) ?
                  tst.DaylightName : tst.StandardName, tstTime);
Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst));

Класс TimeZoneInfo

0 голосов
/ 06 февраля 2009

David

Я думаю, что оригинальный вопрос заключается в получении информации о TimeZone с сервера. Иногда я видел, что вам нужно получить информацию TimeZOne, чтобы ваш сервер и клиент находились в одной зоне.

Например, если у вас есть устройство, которое синхронизируется с сервером, если вы берете deviec в другое место, где он синхронизирует локальный сервер, вы можете установить информацию о часовом поясе вашего устройства на часовой пояс локального сервера.

В этой ситуации очень важно установить для клиентского часового пояса часовой пояс сервера, в противном случае ваш клиент отображает время другого / исходного часового пояса.

Я думаю, что вы можете рассмотреть варианты, такие как "Параметры DHCP", "NTP-сервер", но я не знаю точного решения этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...