*BSD → Неправильное время на FreeBSD — это не страшно. UPD: И в PHP не страшно тоже
Как всем известно, в 2011 году указом президента РФ был отменен переход на зимнее время. Тем не менее, 30 октября на многих компьютерах часы были переведены. Мы не будем выяснять почему нужные апдейты не были вовремя скачаны установлены (нерадивость админов или невозможность этой операции). Главное сейчас привести часы в актуальное состояние. Конкретно речь пойдет об ОС FreeBSD. Кого не минула чаша сия — прошу под кат.
НЛО прилетело и опубликовало эту надпись здесь.
НЛО прилетело и опубликовало эту надпись здесь.
PostgreSQL → Зона недопонимания
По некоторым причинам, само понятие «времени с часовым поясом» сбивает с толку многих пользователей и разработчиков приложений. Это влечет за собой появление огромного числа шероховатостей в случае когда приложения должны иметь дело с множеством часовых поясов. В конечном итоге разработчики пытаются оформить эту логику в виде специального кода внутри приложения, в результате чего неизбежно получают заслуженный геморрой с обработкой данных.Вот некоторые распространенные ошибочные причины, которые я слышал, призывающие не использовать тип timestamp with time zone:
- Я хочу хранить все в формате UTC;
- Я не хочу получать несколько разных часовых поясов из запроса;
- Мы используем специальную библиотеку для обработки часовых поясов;
- Я не хочу тратить дисковое пространство для хранения часового пояса.
Все эти тезисы произрастают из фундаментального непонимания принципов хранения временных данных в базе данных.
Хабрахабр → Локальное время на сайте вместо московского
Всем доброго времени суток. У меня есть предложение, которое, если будет воплощено, немного облегчит жизнь тем, кто читает\пишет тут, находясь далеко от Москвы.
Дело вот в чем. Как известно, актуальность статьи или комментария очень важна на Хабре. Зачастую, писать или нет комментарий на статью или ответ на другой комментарий зависит от того, как давно эта статья\комментарий были написаны.
А теперь, собственно, суть. Я не знаю, какое время отображается под статьей или комментарием. Я догадываюсь, что московское. Теперь, чтобы оценить актуальность, мне надо сосредоточиться и перевести время из местного в московское и назад. Учитывая то, что я живу в (UTC-05:00), и переходы на зимнее\летнее время у нас происходят в разное время, помнить все время разницы во времени — это задача нетривиальная.
И я предполагаю, что таких пользователей много. По статистике, около 40% процентов пользователей не из Питера или Москвы, следовательно, в другом поясе. Может, кто-то уже наловчился переводить в уме часы, но все же это не совсем удобно.
Так вот, само предложение очень короткое — пусть на сайте отображается локальное время с учетом часового пояса, проставленного на машине? М? Ну пожалуйста!
UPD.: Я подозреваю, что москвичи, для которых нет жизни за МКАДом, сейчас усиленно заминусуют, но все же надеюсь, что все остальные меня поддержат.
Дело вот в чем. Как известно, актуальность статьи или комментария очень важна на Хабре. Зачастую, писать или нет комментарий на статью или ответ на другой комментарий зависит от того, как давно эта статья\комментарий были написаны.
А теперь, собственно, суть. Я не знаю, какое время отображается под статьей или комментарием. Я догадываюсь, что московское. Теперь, чтобы оценить актуальность, мне надо сосредоточиться и перевести время из местного в московское и назад. Учитывая то, что я живу в (UTC-05:00), и переходы на зимнее\летнее время у нас происходят в разное время, помнить все время разницы во времени — это задача нетривиальная.
И я предполагаю, что таких пользователей много. По статистике, около 40% процентов пользователей не из Питера или Москвы, следовательно, в другом поясе. Может, кто-то уже наловчился переводить в уме часы, но все же это не совсем удобно.
Так вот, само предложение очень короткое — пусть на сайте отображается локальное время с учетом часового пояса, проставленного на машине? М? Ну пожалуйста!
UPD.: Я подозреваю, что москвичи, для которых нет жизни за МКАДом, сейчас усиленно заминусуют, но все же надеюсь, что все остальные меня поддержат.
XSLT → Преобразование даты в международный формат(UTC). Шаблон для версий XSLT от 1.0
Потребовалось переводить дату в xml файлах из московского времени в международное. Изначально проблема решалась вставкой Java скрипа, но потребовалось сделать используя только встроенные возможности XSLT 1.0.
Сразу предупреждаю комментирующих, версия XSLT 2.0, где есть тип данных Дата, не годится, требуется реализация именно в 1.0.
Скачать пример, шаблон, результат и парсер можно здесь.
Итак, шаги решения задачи:
Подзадачи:
Исходный шаблон даты:
DD.MM.YYYY hh:mm:ss
Подправить XSL под ваш формат можно без проблем, достаточно изменить последовательность разрезания и указать разделители.
Формат UTC даты:
YYYY-MM-DD hh:mm:ss
Подправляется еще проще, при сборе конечной строки.
Если требуется другие значения смещения часового пояса, достаточно исправить их в функции MoscowOffsetTime.
Использование шаблона:
Сразу предупреждаю комментирующих, версия XSLT 2.0, где есть тип данных Дата, не годится, требуется реализация именно в 1.0.
Скачать пример, шаблон, результат и парсер можно здесь.
Итак, шаги решения задачи:
- Разбиение исходной даты в нашем формате на составляющие.
- Определение смещения часового пояса относительно UTC учитывая переход на зимнее/летнее время, для москва летом смещение -4, зимой -3. Переход на летнее время происходит в два часа ночи последнего воскресенья марта, переход на зимнее время в три часа ночи последнего воскресенья октября.
- Перевод всех частей даты в UTC время
- Сбор даты в UTC формате.
Подзадачи:
- Поиск дня недели, используется формула Зеллера
- Поиск количества дней в месяце
- Проверка года на високосность
Исходный шаблон даты:
DD.MM.YYYY hh:mm:ss
Подправить XSL под ваш формат можно без проблем, достаточно изменить последовательность разрезания и указать разделители.
Формат UTC даты:
YYYY-MM-DD hh:mm:ss
Подправляется еще проще, при сборе конечной строки.
Если требуется другие значения смещения часового пояса, достаточно исправить их в функции MoscowOffsetTime.
Использование шаблона:
<xsl:call-template name="GetTime">
<xsl:with-param name="time" select="10.15.2010 14:10:17"></xsl:with-param>
</xsl:call-template>
* This source code was highlighted with Source Code Highlighter.Веб-разработка → Автоматическое определение часового пояса пользователя
Мужик сидит, слушает радио.
— В Москве полночь, в Благовещенске 6 утра, во Владивостоке, Хабаровске, Южно-Сахалинске 7, в Магадане 8, в Петропавловске-Камчатском 9 часов.
Мужик сидит, сидит, потом встаёт, и с некоторым сожалением произносит:
— Эх, ну и бардак же у нас в стране!
Текст перепечатан с аудиозаписи позывных «Маяка».
Для справки: в Петропавловске-Камчатском теперь UTC+11 (летом UTC+12), поэтому теперь в полночь по московскому времени там было бы 8 часов, а не 9.
Во многих местах на сайтах отображается время. И во многих случаях лучше всего отображать не время по Гринвичу, не время на сервере, а время в часовом поясе пользователя.
Часто предлагается выбрать свой часовой пояс из огромного списка возможных вариантов. Конечно, возможность приятная, но удобнее, если сайт может определить часовой пояс пользователя сам. А сделать это, как можно догадаться, совсем несложно — достаточно получить локальное время и отступ от UTC с помощью Javascript и передать этот отступ на сервер с помощью XMLHttpRequest.
— В Москве полночь, в Благовещенске 6 утра, во Владивостоке, Хабаровске, Южно-Сахалинске 7, в Магадане 8, в Петропавловске-Камчатском 9 часов.
Мужик сидит, сидит, потом встаёт, и с некоторым сожалением произносит:
— Эх, ну и бардак же у нас в стране!
Текст перепечатан с аудиозаписи позывных «Маяка».
Для справки: в Петропавловске-Камчатском теперь UTC+11 (летом UTC+12), поэтому теперь в полночь по московскому времени там было бы 8 часов, а не 9.
Во многих местах на сайтах отображается время. И во многих случаях лучше всего отображать не время по Гринвичу, не время на сервере, а время в часовом поясе пользователя.
Часто предлагается выбрать свой часовой пояс из огромного списка возможных вариантов. Конечно, возможность приятная, но удобнее, если сайт может определить часовой пояс пользователя сам. А сделать это, как можно догадаться, совсем несложно — достаточно получить локальное время и отступ от UTC с помощью Javascript и передать этот отступ на сервер с помощью XMLHttpRequest.
Персональные блоги → Работа со временем в разных часовых поясах
Прочитал статью Как перестать думать о часовых поясах и начать жить и заметил, что кое-что в ней отсутствует.
Статья довольно познавательная, но в ней не хватает практического применения. По работе мне пришлось столкнуться с обработкой дат, поэтому хочу поделиться своим опытом.
Статья довольно познавательная, но в ней не хватает практического применения. По работе мне пришлось столкнуться с обработкой дат, поэтому хочу поделиться своим опытом.
Персональные блоги → Пилим патриотизм
В последнее время тема «патриотизма» и «всего национального» («всего русского», «всего отечественного», etc.) стала довольно прибыльной…
Отечественный браузер с нуля…
Отечественная ОС с нуля…
Отечественный браузер-сборка Firefox…
Отечественный прокси-сервер…
Отечественный Linux-дистрибутив…
Отечественные p2p-сети…
И апогей: Отечественные домены…
Господа политики-энтузиасты, какие ещё умные слова вычитаете из википедии?
Вам самим-то не смешно? А люди «из интернета»-то смеются… Людям «в интернетах» уже настолько смешно, что аж очень грустно, что «избранные нами» политики зарабатывают на якобы патриотизме.
о чём это я?
Отечественный браузер с нуля…
Отечественная ОС с нуля…
Отечественный браузер-сборка Firefox…
Отечественный прокси-сервер…
Отечественный Linux-дистрибутив…
Отечественные p2p-сети…
И апогей: Отечественные домены…
Господа политики-энтузиасты, какие ещё умные слова вычитаете из википедии?
Вам самим-то не смешно? А люди «из интернета»-то смеются… Людям «в интернетах» уже настолько смешно, что аж очень грустно, что «избранные нами» политики зарабатывают на якобы патриотизме.
о чём это я?
Персональные блоги → PHP vs MySQL. У кого время быстрее?
Не-не, тут речь не о производительности, а о самых обыкновенных часах =)
Как-то раз увидел в PHP что-то вроде
Кажется, на говнокоде дело было…
Посмеялся и забыл. Потом перелез с винды на убунту и вот вчера произошло нечто интересное =) MySQL и PHP в XAMPP (LAMPP) вернули разное текущее время!
т.к. под виндой подобная проблема не наблюдалась, покопался в инете и узнал, что Линух и Винда по разному трактуют системное время. Винда выставляет системное время в соответствии с местным (причем делает она это постоянно при каждой загрузке и синхронизации), а Линукс считает системное время UTC и местное отсчитывает исходя из установленного часового пояса.
1. Установить время на текущее.
2. Сделать системное время локальным:
3. Синхронизировать локальное и системное время:
4. Перезагрузить компьютер при необходимости. Ну в моем случае, нужно было просто перезагрузить XAMPP/LAMPP
Предположительно (т.к. меня удовлетворило первое решение) здесь:
dev.mysql.com/doc/refman/5.1/en/time-zone-support.html
Но поскольку там есть летнее время, то данное решение работает лишь 6 месяцев в году. А вот у алжирских сисадминов такая проблема никогда, наверное, не возникала =)
Как-то раз увидел в PHP что-то вроде
$date = mysql_result(mysql_query("SELECT CURRENT_TIMESTAMP"), 0, 0);
Кажется, на говнокоде дело было…
Посмеялся и забыл. Потом перелез с винды на убунту и вот вчера произошло нечто интересное =) MySQL и PHP в XAMPP (LAMPP) вернули разное текущее время!
print(date('Y-m-d H:i:s'));
// 2009-06-20 8:00:00
print("\n", mysql_result(mysql_query("SELECT CURRENT_TIMESTAMP"), 0, 0));
// 2009-06-20 15:00:00
т.к. под виндой подобная проблема не наблюдалась, покопался в инете и узнал, что Линух и Винда по разному трактуют системное время. Винда выставляет системное время в соответствии с местным (причем делает она это постоянно при каждой загрузке и синхронизации), а Линукс считает системное время UTC и местное отсчитывает исходя из установленного часового пояса.
Выход 1. Подогнать системное время линукса под локальное
1. Установить время на текущее.
user@server:~$ sudo date -s 12:002. Сделать системное время локальным:
user@server:~$ sudo /sbin/hwclock --systohc --localtime3. Синхронизировать локальное и системное время:
user@server:~$ sudo /sbin/hwclock --hctosys --localtime4. Перезагрузить компьютер при необходимости. Ну в моем случае, нужно было просто перезагрузить XAMPP/LAMPP
user@server:~$ sudo /opt/lampp/lampp restartВыход 2. Подогнать часовой пояс для MySQL
Предположительно (т.к. меня удовлетворило первое решение) здесь:
dev.mysql.com/doc/refman/5.1/en/time-zone-support.html
Выход 3. Переехать в Лондон
Но поскольку там есть летнее время, то данное решение работает лишь 6 месяцев в году. А вот у алжирских сисадминов такая проблема никогда, наверное, не возникала =)