Показать сообщение отдельно
Старый 22.02.2010, 17:57   #1
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Работа с временными зонами в .Net 3.5

Пока думаю над архитектурой сайта взволновал вопрос о временных зонах для пользователей.

Покопался в интернете и нашел следующие возможности Net Framework 3.5:

1. Хранить время в базе данных следует в формате UTC т.к. из него можно получить время для любой временной зоны. Получить время в данном формате можно следующим образом:
DateTame utcTime = DateTime.Now.ToUniversalTime();
2. Все знают что при регистрации на многих форумах дается возможность выбрать временной пояс из списка. Так вот сделать такой список очень просто используя класс TimeZoneInfo. Метод TimeZoneInfo.GetSystemTimeZones() возвращает коллекцию временных поясов доступных в системе. У каждого экземпляра данной коллекции есть два полезных свойства: 1) DisplayName - свойство возвращает название временной зоны как она зарегистрирована в реестре (например: (GMT+03:00) Москва, Санкт-Петербург, Волгоград если установлена русская локализация ОС) 2) Id - идентификатор временной зоны, строковое значение и следовательно в базе данных надо хранить как строку (для временной зоны приведенной выше Id будет равен: Russian Standard Time)

3. Для получения временной зоны по ее идентификатору существует метод:
TimeZoneInfo.FindSystemTimeZoneById(string id)
4. Последнее что нужно знать - как преобразовать время в формате UTC в локальное время пользователя. Для этого можно использовать метод
TimeZoneInfo.ConvertTimeFromUtc(DateTime dateTime, TimeZoneInfo destinationTimeZone)

Для программистов на Net Framework 2.0 существует другой метод приведения времени из формата UTC к локальному - вручную
DateTame localTime = utcTime.AddHours(-5.5);
Поэтому придется создавать свой список временных зон и присваивать им свои идентификаторы и смещение. В принципе написание такого класса займет минут 5 - 10 имея список временных зон.


Вот в принципе и все что хотел рассказать... осталось опробовать данные классы на своем хостинге, когда буду развертывать сайт
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием