Как стать автором
Обновить

Datetime или timestamp

MySQL *
На днях я столкнулся с тем, что многие разработчики не знают в чём отличие типов данных DATETIME и TIMESTAMP в MySQLе, а так же как хранить дату и время, если необходимо учитывать разные часовые пояса для разных пользователей веб-приложения. Поэтому хочу дать ниже разъяснения с пояснениями.

DATETIME
Хранит время в виде целого числа вида YYYYMMDDHHMMSS, используя для этого 8 байтов. Это время не зависит от временной зоны. Оно всегда отображается при выборке точно так же, как было сохранено, независимо от того какой часовой пояс установлен в MySQL. Даю пример:
Читать дальше →
Всего голосов 77: ↑67 и ↓10 +57
Просмотры 331K
Комментарии 132

PHP vs MySQL. У кого время быстрее?

Чулан
Не-не, тут речь не о производительности, а о самых обыкновенных часах =)

Как-то раз увидел в 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:00

2. Сделать системное время локальным:

user@server:~$ sudo /sbin/hwclock --systohc --localtime

3. Синхронизировать локальное и системное время:

user@server:~$ sudo /sbin/hwclock --hctosys --localtime

4. Перезагрузить компьютер при необходимости. Ну в моем случае, нужно было просто перезагрузить 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 месяцев в году. А вот у алжирских сисадминов такая проблема никогда, наверное, не возникала =)
Всего голосов 20: ↑10 и ↓10 0
Просмотры 383
Комментарии 11

Пилим патриотизм

Чулан
В последнее время тема «патриотизма» и «всего национального» («всего русского», «всего отечественного», etc.) стала довольно прибыльной…
Отечественный браузер с нуля…
Отечественная ОС с нуля…
Отечественный браузер-сборка Firefox…
Отечественный прокси-сервер…
Отечественный Linux-дистрибутив…
Отечественные p2p-сети…
И апогей: Отечественные домены
Господа политики-энтузиасты, какие ещё умные слова вычитаете из википедии?
Вам самим-то не смешно? А люди «из интернета»-то смеются… Людям «в интернетах» уже настолько смешно, что аж очень грустно, что «избранные нами» политики зарабатывают на якобы патриотизме.

о чём это я?
Читать дальше →
Всего голосов 60: ↑39 и ↓21 +18
Просмотры 266
Комментарии 45

Автоматическое определение часового пояса пользователя

Разработка веб-сайтов *
Мужик сидит, слушает радио.
— В Москве полночь, в Благовещенске 6 утра, во Владивостоке, Хабаровске, Южно-Сахалинске 7, в Магадане 8, в Петропавловске-Камчатском 9 часов.
Мужик сидит, сидит, потом встаёт, и с некоторым сожалением произносит:
— Эх, ну и бардак же у нас в стране!

Текст перепечатан с аудиозаписи позывных «Маяка».
Для справки: в Петропавловске-Камчатском теперь UTC+11 (летом UTC+12), поэтому теперь в полночь по московскому времени там было бы 8 часов, а не 9.


Во многих местах на сайтах отображается время. И во многих случаях лучше всего отображать не время по Гринвичу, не время на сервере, а время в часовом поясе пользователя.

Часто предлагается выбрать свой часовой пояс из огромного списка возможных вариантов. Конечно, возможность приятная, но удобнее, если сайт может определить часовой пояс пользователя сам. А сделать это, как можно догадаться, совсем несложно — достаточно получить локальное время и отступ от UTC с помощью JavaScript и передать этот отступ на сервер с помощью XMLHttpRequest.

Читать дальше →
Всего голосов 61: ↑45 и ↓16 +29
Просмотры 12K
Комментарии 35

Преобразование даты в международный формат(UTC). Шаблон для версий XSLT от 1.0

XSLT *
Потребовалось переводить дату в xml файлах из московского времени в международное. Изначально проблема решалась вставкой Java скрипа, но потребовалось сделать используя только встроенные возможности XSLT 1.0.
Сразу предупреждаю комментирующих, версия 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.


Посмотреть шаблон
Всего голосов 32: ↑24 и ↓8 +16
Просмотры 13K
Комментарии 13

Локальное время на сайте вместо московского

Habr
Всем доброго времени суток. У меня есть предложение, которое, если будет воплощено, немного облегчит жизнь тем, кто читает\пишет тут, находясь далеко от Москвы.
Дело вот в чем. Как известно, актуальность статьи или комментария очень важна на Хабре. Зачастую, писать или нет комментарий на статью или ответ на другой комментарий зависит от того, как давно эта статья\комментарий были написаны.

А теперь, собственно, суть. Я не знаю, какое время отображается под статьей или комментарием. Я догадываюсь, что московское. Теперь, чтобы оценить актуальность, мне надо сосредоточиться и перевести время из местного в московское и назад. Учитывая то, что я живу в (UTC-05:00), и переходы на зимнее\летнее время у нас происходят в разное время, помнить все время разницы во времени — это задача нетривиальная.

И я предполагаю, что таких пользователей много. По статистике, около 40% процентов пользователей не из Питера или Москвы, следовательно, в другом поясе. Может, кто-то уже наловчился переводить в уме часы, но все же это не совсем удобно.

Так вот, само предложение очень короткое — пусть на сайте отображается локальное время с учетом часового пояса, проставленного на машине? М? Ну пожалуйста!

UPD.: Я подозреваю, что москвичи, для которых нет жизни за МКАДом, сейчас усиленно заминусуют, но все же надеюсь, что все остальные меня поддержат.
Всего голосов 42: ↑39 и ↓3 +36
Просмотры 1.3K
Комментарии 10

Зона недопонимания

PostgreSQL *
Перевод
По некоторым причинам, само понятие «времени с часовым поясом» сбивает с толку многих пользователей и разработчиков приложений. Это влечет за собой появление огромного числа шероховатостей в случае когда приложения должны иметь дело с множеством часовых поясов. В конечном итоге разработчики пытаются оформить эту логику в виде специального кода внутри приложения, в результате чего неизбежно получают заслуженный геморрой с обработкой данных.

Вот некоторые распространенные ошибочные причины, которые я слышал, призывающие не использовать тип timestamp with time zone:

  • Я хочу хранить все в формате UTC;
  • Я не хочу получать несколько разных часовых поясов из запроса;
  • Мы используем специальную библиотеку для обработки часовых поясов;
  • Я не хочу тратить дисковое пространство для хранения часового пояса.


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

Читать дальше →
Всего голосов 45: ↑40 и ↓5 +35
Просмотры 35K
Комментарии 16

Изменение часовых зон в России, Белоруссии и на Украине

Системное администрирование *
Как вы, наверняка, уже слышали, осенью 2011 сразу несколько государств приняли решение об изменении порядка исчисления времени на своей территории, а также об отмене сезонного перехода на летнее время.
В списке этих государств: Россия, Белоруссия, Украина, частично признанные государства: Абхазия и Южная Осетия, а также непризнанное государство Приднестровье. Т.е. во всех часовых поясах этих стран теперь круглый год будет фиксированный сдвиг относительно UTC, без дополнительных сезонных сдвигов.
(Примечание: Украина сначала приняла решение о переходе на время UTC+3 без летнего времени, но потом отменила принятое ранее решение и пока вернулась к прежнему порядку исчисления времени с сезонными переводами часов. Подробности ниже.)

Server clockВ этой статье я опишу суть принятых изменений часовых поясов и опишу техническую сторону вопроса касательно IT-систем (корпоративной инфраструктуры, серверов, рабочих станций, сервисов, приложений и т.п.). Постараюсь ответить на ряд основных вопросов, возникающих в связи с этими изменениями:
— Какие IT-системы может затронуть изменение часовых поясов?
— Какие проблемы это может вызвать?
— Как подготовиться к этому, чтобы по возможности избежать проблем?

Полагаю, многим системным/прикладным администраторам, а также некоторым разработчикам приложений/сервисов, полезно будет ознакомиться с этим материалом. А потом предлагаю всем заинтересованным обсудить и дополнить эту информацию в комментариях.
Для начала немного общей информации...
Всего голосов 263: ↑254 и ↓9 +245
Просмотры 38K
Комментарии 101

Tzdata — глобальная база знаний о часовых поясах

Системное администрирование *
Если нам где-либо (например, в каких-то приложениях) требуется работать не только с универсальным временем UTC, но и с местным временем в различных точках Земли, то здесь встаёт вопрос о необходимости некой базы знаний о том, как вычисляется локальное время относительно UTC в различных регионах мира.

Многие Unix-like системы для хранения информации обо всех мировых часовых поясах используют базу tzdata (она же tz database, она же zoneinfo database, она же Olson database — в честь Артура Олсона, основателя этой базы знаний).

Впервые начал собирать эту базу Артур Дэвид Олсон (Arthur David Olson), позже к этому проекту подключились и другие участники. Сейчас же основным коммитером новой информации в базу tzdata является Пол Эггерт (Paul Eggert), а Артур Олсон сейчас занимается разработкой и поддержкой утилит для работы с локальным временем и данными о часовых поясах (пакет tzcode).

В базе tzdata содержится детальная информация обо всех часовых поясах во всех регионах мира:
— координатная привязка основных населённых пунктов, характеризующих часовой пояс;
— смещение локального времени в различных регионах относительно универсального времени UTC;
— указано, в каких регионах применяется летнее время (DST), насколько оно смещается относительно стандартного, указаны точные даты и время переключения на летнее время и обратно в различных регионах в различные периоды;
— информация о високосных секундах (leap seconds).
Читать дальше →
Всего голосов 74: ↑67 и ↓7 +60
Просмотры 35K
Комментарии 12

Неправильное время на FreeBSD — это не страшно. UPD: И в PHP не страшно тоже

*nix *
Как всем известно, в 2011 году указом президента РФ был отменен переход на зимнее время. Тем не менее, 30 октября на многих компьютерах часы были переведены. Мы не будем выяснять почему нужные апдейты не были вовремя скачаны установлены (нерадивость админов или невозможность этой операции). Главное сейчас привести часы в актуальное состояние. Конкретно речь пойдет об ОС FreeBSD. Кого не минула чаша сия — прошу под кат.

Читать дальше →
Всего голосов 34: ↑27 и ↓7 +20
Просмотры 21K
Комментарии 38

Ошибка часового пояса для Украины в календаре. Не пропустите встречу!

IT-компании
Вероятно в Гугле не знали, что в Украине заменили переход на круглогодичное летнее время (GMT +3) его отменой.



P.S. Для смены пояса надо поставить галочку для показа всех часовых поясов и выбрать любой GTM +2.

Upd: По доступной мне информации, ошибку исправлят в следующей версии, которую задеплоят через несколько недель.
Всего голосов 22: ↑14 и ↓8 +6
Просмотры 5K
Комментарии 13

Эксперимент: две недели без времени

GTD *
Часы и время окружают нас повсюду. Мы привыкли видеть их везде: на компьютере, телефоне, настенных и наручных часах, а гугло-очки вообще сделают так, что время всегда будет перед глазами. Мы ощущаем потребность во времени и всегда хотим знать который сейчас час.

А что если отказаться от рамок времени? Что изменится? Вам хватает 24 часа в сутках? Когда эта мысль пришла мне в голову, и я не мог не проверить её на себе. Под катом моя история и ощущения двух недель жизни без часов и без времени. Если кратко: оно того стоит!
Читать дальше →
Всего голосов 127: ↑108 и ↓19 +89
Просмотры 118K
Комментарии 176

«Never say never» или Работаем с таймзонами правильно

Блог компании VK Python *Программирование *
Эта статья рассказывает о проблемах, которые поджидают программиста, работающего с часовыми поясами. В теории, вроде, всё хорошо, просто и понятно, но жизнь — штука сложная, и на практике, порой, возникают совершенно неожиданные ситуации.

TL;DR: Работа с таймзонами — это боль и унижение. Никогда не работайте с таймзонами!

Итак, все кругом твердят вам, что при получении времени от пользователя нужно сразу же переводить его в UTC, работать со временем нужно только в UTC и хранить время тоже нужно строго в UTC. Совет, на первый взгляд, выглядит разумным, и следование ему делает вашу жизнь проще… Если только ваша программа не предполагает сложной работы с датами. Записать в базу данных дату и время регистрации пользователя на сайте? Сохранить время отправки сообщения или дату создания заказа в интернет-магазине? Вывести сообщение в лог с указанием даты-времени? Используйте UTC и всё будет в порядке, можете даже не читать эту статью дальше. Любое текущее время можно совершенно спокойно конвертировать в UTC и забыть о проблемах. Но что, если мы хотим работать с временем в будущем? Или в прошлом? Например, если мы пишем сервис календаря, или сервис для отложенной отправки сообщений?

Читать дальше →
Всего голосов 84: ↑79 и ↓5 +74
Просмотры 67K
Комментарии 103

Интернет магазины доставляют правильно с помощью DaData.ru

Блог компании HFLabs
Клиентов интернет-магазинов бесят потерянные посылки и формы заказа с десятками полей. Когда клиента что-то бесит, он уходит. Поэтому хороший владелец магазина старается облегчить жизнь и покупателю, и себе самому.

Владельцы пяти интернет-магазинов рассказали мне, как как они используют Подсказки DaData.ru чтобы отправлять посылки без возвратов, упрощать формы оформления заказов и сегментировать клиентов.

Читайте, если вы владелец интернет-магазина или причастны к его разработке
Всего голосов 16: ↑11 и ↓5 +6
Просмотры 12K
Комментарии 6

Как работать с метками времени (timestamp) в PostgreSQL?

Разработка веб-сайтов *PostgreSQL *SQL *
Перевод
Тема работы с временными метками в PostgreSQL плохо раскрыта в русскоязычных профильных публикациях в Интернете и служит частым источником проблем в работе программистов. Предлагаю вашему вниманию перевод материала от Hubert Lubaczewski, автора популярного зарубежного блога depesz.com. Надеюсь, статья будет для вас полезна!

image

Время от времени в IRC или в почтовых рассылках кто-нибудь задает вопросы, которые показывают глубокое непонимание (или недостаток понимания) меток времени, особенно тех, которые учитывают часовые пояса. Так как я уже сталкивался с этим ранее, позвольте мне рассказать, что такое timestamps, как с ними работать и с какими наиболее распространенными загвоздками вы можете столкнуться.
Читать дальше →
Всего голосов 38: ↑37 и ↓1 +36
Просмотры 133K
Комментарии 17

Заблуждения большинства программистов относительно «времени»

Программирование *Анализ и проектирование систем *Системное программирование *
Перевод
Много дней назад я решил записать некоторые наблюдения, сформировавшиеся пока в последние годы я занимался тестированием. Рассматривая области, которые получают наибольшую отдачу от тестирования, я понял, что у меня накопилось много конкретных мыслей о том, как мы — программисты — склонны небрежно обращаться с понятием «время» в программировании.

Тогда я написал пост «Заблуждения программистов относительно „времени“», в котором указал 34 ошибочных представления и заблуждения, относящихся как к календарному, так и к системному времени. С большинством из них я столкнулся сам, занимаясь дебаггингом программ (как рабочих, так и тестовых).

Читать дальше →
Всего голосов 62: ↑55 и ↓7 +48
Просмотры 56K
Комментарии 100

Как сделать разный часовой пояс в разных базах данных на одном сервере

Firebird/Interbase *
Из песочницы
Уважаемые Хабравчане, решил поделиться с Вами техническим решением некоторых интересных и на первый взгляд не очевидных проблем. Всю жизнь я в основном только черпал информацию, читал замечательные статьи (в том числе на Хабре) очень помогавшие мне в решении тех или иных технических проблем. Но в последние 2 года, занявшись разработкой своей облачной платформы для автоматизации предприятий, мне пришлось решать довольно много задач “впервые”, т.е. которые если кто-то и решал, то описания (даже близко) я не находил. В связи с этим я решил написать 3 цикла статей: цикл по базам данных, цикл по безопасности и цикл по системам автоматизации. Эта статья — первая статья первого цикла.

Краткая формулировка задачи: каким-то образом current_date, current_time и current_timestamp должны выдавать дату-время в зависимости от настроек в аккаунте пользователя и при этом на самом сервере будет стоять московское время.

Система задумывалась неограниченно масштабируемая, с огромным числом потенциальных пользователей в любом регионе нашей необъятной страны, в какой-то момент встал вопрос, а удобно ли будет пользователям, например во Владивостоке, работать в системе с московским временем. Сервера то находятся в Москве, на них стоит московское время, при этом каждому пользователю (не важно, из какого он региона) выделяется несколько своих (индивидуальных) баз данных и все они находятся, грубо говоря, на одном сервере. Делать под каждый часовой пояс свой сервер глупо, да и не возможно с точки зрения концепции системы, ибо любой пользователь в любой момент может часовой пояс поменять.
Читать дальше →
Всего голосов 18: ↑8 и ↓10 -2
Просмотры 3.8K
Комментарии 39

Как не надо работать с часовыми поясами или Аэрофлот-фэйл

Программирование *
Решился я недавно на покупку билетов Аэрофлота. Затея сама по себе подозрительная, но я решил усугубить: скачал их мобильное приложение под андроид и купил все там. Заказал билет из Барселоны на 27 февраля, вылет в 23:45, и очень удивился, когда после оплаты мне на почту свалились билеты на 28 февраля с вылетом в 23:45 и прибытием 1-го марта. Как так, не мог же я так грубо ошибиться?

Я провел раскопки, которые показали, что ошибка именно в мобильном приложении, поехали:
Всего голосов 116: ↑115 и ↓1 +114
Просмотры 36K
Комментарии 77

Работа с часовыми поясами в JavaScript

Блог компании VK JavaScript *Программирование *
Перевод


Недавно я работал над задачей добавления часовых поясов в JS-библиотеку календаря, которую ведёт моя команда. Мне было хорошо известно о никудышной поддержке часовых поясов в JavaScript, но я надеялся, что абстрагирование имеющихся объектов данных позволит легко решить большинство трудностей.

Однако мои мечты пошли прахом. Когда я углубился в задачу, то понял, что в этом языке действительно трудно работать с часовыми поясами. Реализовать что-то сложнее простого форматирования отображения времени и вычисления даты с помощью комплексных операций (функции календаря) было чрезвычайно трудным делом. Я получил ценный опыт решения этой проблемы, и это повлекло за собой новые затруднения.

В этой статье я хочу обсудить, с чем я столкнулся и как это решал. Пока я писал текст, осознал, что причиной всех невзгод было плохое понимание мной самой темы часовых поясов. В свете этого осознания я предлагаю сначала подробно поговорить об определении и стандартах, а уже потом переходить к JavaScript.
Читать дальше →
Всего голосов 90: ↑84 и ↓6 +78
Просмотры 71K
Комментарии 13

Самонастраивающиеся часы с электронным дисплеем

Разработка под Arduino *DIY или Сделай сам
Recovery mode
Перевод


Основная идея заключалась в создании самонастраивающихся часов, которые должны работать в часовом поясе CET с поддержкой перехода на летнее время. В качестве источника времени я использовал сигнал GPS, полученный от модуля NEO-7M, который имеет последовательный порт. В качестве блока индикации я использовал 2,9-дюймовый дисплей e-Paper ( электронными чернилами). Все эти модули подключены к Arduino Nano.
Всего голосов 39: ↑26 и ↓13 +13
Просмотры 8.4K
Комментарии 131