forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общее (http://forum.boolean.name/forumdisplay.php?f=139)
-   -   Работа с временными зонами в .Net 3.5 (http://forum.boolean.name/showthread.php?t=11995)

pax 22.02.2010 17:57

Работа с временными зонами в .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 имея список временных зон.


Вот в принципе и все что хотел рассказать... осталось опробовать данные классы на своем хостинге, когда буду развертывать сайт :)

pax 22.02.2010 20:41

Ответ: Работа с временными зонами в .Net 3.5
 
C временными зонами вроде все не сложно, интересно, что делать с переходом на летнее/зимнее время?

pax 22.02.2010 21:11

Ответ: Работа с временными зонами в .Net 3.5
 
Тут похоже без ява скрипта не обойдется... вот интересно на булке есть такой код:

Код:

<!-- auto DST correction code -->
<form action="profile.php?do=dst" method="post" name="dstform">
        <input type="hidden" name="s" value="" />
        <input type="hidden" name="do" value="dst" />
</form>
<script type="text/javascript">
<!--
        var tzOffset = 3 + 0;
        var utcOffset = new Date().getTimezoneOffset() / 60;
        if (Math.abs(tzOffset + utcOffset) == 1)
        {        // Dst offset is 1 so its changed
                document.forms.dstform.submit();
        }
//-->
</script>
<!-- / auto DST correction code -->

Может кто объяснить что он делает?

pax 23.02.2010 23:12

Ответ: Работа с временными зонами в .Net 3.5
 
Вот глядя на этот код появилась идея... сохранить в куках временной офсет и при выводе времени его учитывать... правда первый заход на страницу будет отображать неверное время... но это как мне кажется ерунда?

Может у кого другие идеи есть?

Randomize 24.03.2010 00:40

Ответ: Работа с временными зонами в .Net 3.5
 
getTimezoneOffset()
http://www.w3schools.com/jsref/jsref...zoneOffset.asp
Деление на 60 думаю понятно зачем

pax 24.03.2010 11:03

Ответ: Работа с временными зонами в .Net 3.5
 
Цитата:

Сообщение от Randomize (Сообщение 142929)
getTimezoneOffset()
http://www.w3schools.com/jsref/jsref...zoneOffset.asp
Деление на 60 думаю понятно зачем

Теме уже месяц, я давно уже понял в чем тут фишка :)


Часовой пояс GMT +4, время: 01:52.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot