Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Веб-программирование > Общее

Общее Веб-разработка в целом, идеи, проекты...

Ответ
 
Опции темы
Старый 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)
 
Ответить с цитированием
Старый 22.02.2010, 20:41   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Работа с временными зонами в .Net 3.5

C временными зонами вроде все не сложно, интересно, что делать с переходом на летнее/зимнее время?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 22.02.2010, 21:11   #3
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Работа с временными зонами в .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 -->
Может кто объяснить что он делает?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 23.02.2010, 23:12   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Работа с временными зонами в .Net 3.5

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

Может у кого другие идеи есть?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 24.03.2010, 00:40   #5
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: Работа с временными зонами в .Net 3.5

getTimezoneOffset()
http://www.w3schools.com/jsref/jsref...zoneOffset.asp
Деление на 60 думаю понятно зачем
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 24.03.2010, 11:03   #6
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Работа с временными зонами в .Net 3.5

Сообщение от Randomize Посмотреть сообщение
getTimezoneOffset()
http://www.w3schools.com/jsref/jsref...zoneOffset.asp
Деление на 60 думаю понятно зачем
Теме уже месяц, я давно уже понял в чем тут фишка
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com