Точное время в твоем мобильном. Цифровые часы на CSS3 и jQuery Как синхронизировать часы в доме

О том, что часы в мобильном отстают узнаешь, как правило, когда куда-то опоздал, примеру, на поезд. В XXI веке неприемлемо когда ваши часы спешат или отстают больше чем на минуту.

И если к наручным часам претензий нет, то смартфоны просто обязаны показывать точное время. Но как показывает практика — это не всегда так. Часы на телефонах такие же «брехучие» как и старые ходики у бабушки в деревне.

Чем определяется точность электронных часов

В первую очередь точностью настройки и стабильностью кварцевого генератора (резонатора). Точность и стабильность частоты последнего как правило составляет 10 -6 . В идеале при таком значении часы убегают чуть более 30 секунд в год.

На практике стабильность немного хуже, так как на частоту резонатора влияют параметры окружающей среды (температура, давление) и напряжение питания генератора. Так же в состав генератора входят и другие элементы, к примеру конденсаторы, параметры которых сильнее зависят от внешних воздействий. В результате часы могут убегать до 30 секунд в месяц.

Повышаем точность часов

В профессиональных устройствах, например в приемо-передающей аппаратуре спутникового телевидения, стабильность генераторов намного выше и может достигать значений 10 -12 .

Поэтому напрашивается сам собой способ взять за эталон частоту несущей внешнего источника сигнала. И использовать ее как опорную для нашего генератора. Возможны два пути: аппаратный и программный.

В первом случае частота генератора часов подстраивается под частоту несущей передающей вышки GSM. Во втором случае базовая вышка GSM передает сигналы точного времени и операционная система подстраивает часы.

Но как показывает отечественная действительность, на сотовых операторов надежды нет. Я несколько раз попадал в ситуацию, когда время на часах перескакивало на несколько часов. После чего пришлось отключить опцию использования данных предоставляемых сетью.

Серверы точного времени

Так как смартфон это компьютер с доступом в интернет, то проще всего синхронизировать часы с эталонными серверами точного времени. В стандартных прошивках этой возможности нет. Но проблема решается установкой допольнительного ПО. Программ таких несколько, и мне приглянулась одна — ClockSync от «отечественного производителя»:-).

ClockSync синхронизирует системное время Android устройства через Интернет по протоколу NTP с серверами точного времени. Программа полезна если оператор сотовой связи не поддерживает NITZ (автоматическую синхронизацию времени) или посылает неверные значения, а также в случае, если часы телефона сильно убегают вперед или отстают.

Работает на планшетах. Актуально если нужно точное время. Тем более на устройствах без GSM модуля.

Напомним, что под системой отсчета подразумевается тело отсчета, с которым связаны система координат и ряд неподвижных одинаковых часов, синхронизированных между собой. Часами будем считать любой прибор, в котором используется тот или иной периодический процесс.

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

. (7.1)

Для этого в каждой системе отсчета должно быть множество часов, находящихся в различных точках пространства. Все эти часы должны идти согласованно, синхронно - их показания в каждый момент времени должны быть одинаковыми.

Синхронизировать часы, помещенные в различные точки системы отсчета, можно только с помощью каких-либо сигналов. Наиболее быстрые сигналы, пригодные для этой цели, - это световые или радиосигналы, которые распространяются с известной скоростью С. Выбор световых сигналов обусловлен еще и тем, что их скорость не зависит от направления в пространстве, а также одинакова во всех инерциальных системах отсчета.

Синхронизацию часов можно произвести следующим образом. Допустим что, из начала системы координат точки 0 по радио в момент времени передается радиосигнал. В момент, когда этот сигнал достигнет часов, находящихся от точки0 на известном расстоянии S , их устанавливают так, чтобы они показывали время
, то есть с учетом времени распространения сигнала. В результате такой операции все часы данной системы отсчета будут синхронизированы в каждый момент времени.

§8. Преобразование Лоренца

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

Новые преобразования были выведены Эйнштейном на основе сформулированных им постулатов. Формально они совпали с преобразованиями, найденными ранее Лоренцем в связи с попытками объяснить неудачу опыта Майкельсона. Но только Эйнштейн вскрыл их глубокий смысл.

Рассмотрим две инерциальный системы отсчета К и К" (рис. 5.1). Как и прежде, система К" К в направлении оси X с постоянной скоростью . Установим в разных точках обеих систем отсчета одинаковые часы и синхронизируем их: отдельно часы системыК и отдельно часы системы К" . За начало отсчета времени возьмем в обеих системах момент (
), когда начала координат (точки0 и 0" ) совпадают.

Так как система К" движется относительно системы К равномерно, связь между координатами и
должна по-прежнему, как и в преобразованиях Галилея, линейно зависеть от времени, то есть

, (8.1)

где - некоторый коэффициент.

Аналогичное выражение можно записать для обратного перехода от системы К к системе К" :

. (8.2)

Для определения коэффициента предположим, что в начальный момент времени (
), когда точки0 и 0" совпадали, из точки 0 в направлении оси X был послан световой сигнал, который через время , измеренное в системеК , достиг точки А с координатой
. В системеК" эта точка имела координату
, где- время, измеренное в системеК" . Заметим, что скорость С в силу второго постулата одна и та же.

Подставив координаты ив выражения (8.1) и (8.2), получим

,

.

Перемножив правые и левые части этих равенств и произведя сокращение на
, получим

,

(8.4)

Таким образом, связь между координатами
иимеет вид:

(8.5)

Для нахождения связи между ипроделаем следующее. Исключив из выражений (8.1) и (8.2) величинуи решив их после этого относительно, получим с учетом выражения (8.4):

(8.6)

Координаты и
ипри рассматриваемом движении системК и К" остаются равными друг другу.

Таким образом, преобразования для координат и времени, получившие название преобразований Лоренца , имеют вид:

,
,
,
, (8.7)

где

Обратные преобразования в силу равноправности всех инерциальных систем отсчета должны иметь аналогичный вид, но с учетом изменения знака скорости V :

,
,
,
. (8.8)

Анализ формул преобразований Лоренца позволяет сделать ряд важных выводов.

Во-первых , особенностью преобразований Лоренца является то, что при
они переходят в преобразования Галилея (5.1). Это означает, что теория относительности не отвергает преобразования Галилея, а включает их в истинные преобразования как частный случай, справедливый при
.

Во-вторых , из преобразований Лоренца следует, что при
подкоренные выражения становятся отрицательными и формулы теряют физический смысл. Это означает, что движение тел со скоростью, большей скорости света в вакууме, невозможно.

В-третьих , в формулы преобразования времени входит пространственная координата, что отражает неразрывную связь пространства и времени.

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

Без атомных часов в настоящее время невозможна работа современных систем навигации (в т.ч. GPS, ГЛОНАСС, Galileo), систем спутниковой и наземной телекоммуникации, в частности станций мобильной связи.

В нескольких странах сформированы национальные центры стандартов времени и частоты, а также службы точного времени, периодически транслирующие временные сигналы по радио.

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

Для этого достаточно знать, как устанавливается время на конкретной модели (мы для примера взяли наручные Romanson — mir-chasov.ks.ua/shop/romanson — хронографом), и иметь под рукой данные о точном времени с атомных часов (сервер/сайт точного времени). Проще говоря, требуются руководство пользователя наручных часов и атомные часы — ничего сложного.

Итак, как синхронизировать свои наручные часы с атомными часами и выставить точное время.

1. Для начала готовим часы к настройке. В аналоговых моделях время выставляется заводной коронкой, которая, как правило, должна быть выдвинута из корпуса в определенное положение (у наших Romanson — это вторая позиция из трех возможных); у цифровых часов время выставляется одной из кнопок на корпусе, на которую, наоборот, надо надавливать. Напомним, что стрелки следует переводить только по ходу.

2. Устанавливаем часы и минуты в соответствии с текущим временем, даем часам поработать, пока секундная стрелка (или счетчик секунд) не встанет в нулевое положение (метка 12 — на аналоговом циферблате и 0 — на цифровом). Положение минутной стрелки может немного измениться, но это нормально, минуты будем выставлять заново. После установки секундной стрелки на 12 останавливаем часы (в Romanson для этого необходимо выдвинуть заводную коронку в крайнюю позицию).

3. Заходим на сервер точного времени; мы использовали данные сервиса time.is (к слову, заодно вы узнаете, насколько точно идут часы в вашем компьютере, смартфоне или планшете).

4. Ловим момент, когда на циферблате атомных часов сменится очередная минута, и «обнулятся» секунды, и устанавливаем свои часы на минуту вперед. Например, если сервер точного времени показал 12:35:00, мы выставляем 12:36. Далее дожидаемся подхода момента следующего «обнуления» секунд на атомных часах и запускаем свои часы. Т.е., в 12:35:59 мы нажимаем на коронку своих Romanson, возвращая ее в нижнее положение и запуская тем самым механизм. На этом всё, теперь наши часы синхронизированы с атомными часами.

И в завершение, специально для поклонников суперточного времени, напомним/уточним, что между показанием настоящих атомных часов и показаниями любого сервера точного времени всегда существует погрешность. Кроме того, погрешности существуют и между показаниями сервера и показаниями часов на экране устройства, с которого на этот сервер зашли. Проще говоря, пока сигнал придет на сервер, а потом с сервера — на ваше устройство связи (время прохождения зависит от удаленности сервера, пропускной способности и загруженности интернет-каналов и ряда других параметров), эталонные атомные часы уже уйдут вперед, и ваши часы хоть на доли секунды, но будут отставать. Потому описанная выше процедура часов не является самой совершенной, но, тем не менее, на бытовом уровне этого достаточно, в особенности если вы пользуетесь механическими часами. В статье использованы материалы с сайта компании «Мир Часов».

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

Технология синхронизации времени

В начале немного расскажу о технологии, с помощью которой происходит получение точного времени из Интернет-источников. Весь процесс синхронизации времени проводиться посредством специального сетевого протокола называемого NTP (Network Time Protocol) . Данный протокол представляет из себя свод различных правил и математических алгоритмов, благодаря которым происходит точная настройка времени на вашем компьютере с разницей в несколько сотых одной секунды. Существует протокол и для систем, не требующих такой точной синхронизации, который называется SNTP . Разница источника и устройства-приёмника времени по нему может составлять до 1 секунды.

Технология передачи параметров точного времени представляет из себя многослойную структуру, где каждый нижележащий слой электронных устройств синхронизируется с вышележащим. Чем ниже технологический слой, тем менее точным будет полученное от него время. Но это в теории, на практике же все зависит от множества параметров, участвующих в системе синхронизации и получить более точное время можно, к примеру, от четвертого слоя устройств, нежели от третьего.

На нулевом уровне этой цепочки передачи всегда располагаются устройства отчета времени, грубо говоря, часы. Эти часы представляют из себя молекулярные, атомные или квантовые устройства подсчета времени и называются эталонными. Такие устройства не передают параметры времени в Интернет напрямую, обычно они подключены к первичному компьютеру посредством высокоскоростного интерфейса с минимальными задержками. Именно эти компьютеры составляют первый слой в технологической цепочке. На втором слое будут располагаться машины получающие время от первого слоя устройств посредством сетевого соединения, чаще всего через Интернет. Все последующие уровни будут получать информацию о точном времени по тем же сетевым протоколам от вышележащих слоев.

Синхронизация времени в Windows

Попробуем произвести синхронизацию времени средствами систем Windows XP, Windows 2003 . Для этого кликните по часам, которые расположены у вас в трее (обычно это правых нижний угол экрана), чтобы вызвать настройки даты и времени. При этом обязательно проверьте настройки “часового пояса ”, которые находятся там же и скорректируйте их при необходимости.

Для Windows Vista, Windows 7 также достаточно кликнуть по часам внизу экрана и перейти к настройкам через специальную ссылку “Изменение настроек даты и времени”

Затем перейдите во вкладку “Время по Интернету” и нажмите кнопку “Изменить параметры”.

Появится окно настроек времени по Интернету, схожее с таким же окном из Windows XP, 2003.

В этом окне имеется опция автоматической сверки часов через Интернет, которая доступна напротив надписи “Выполнять синхронизацию с сервером времени в Интернете ”. Если ее включить, поставив галочку, то периодически время вашего компьютера будет уточняться через Интернет-сервера самой операционной системой.

Далее, напротив опции “Сервер: ” пользователю доступен выбор из списка адресов, с которых будет производиться синхронизация. Попробуйте выбрать один из них и нажать кнопку “Обновить сейчас ”. Если через определенное время под списком появится надпись об ошибке синхронизации, введите вручную один из нижеприведенных адресов сервера и проверьте соединение с ним.

ntp.mobatime.ru
nist1-ny.ustiming.org
ntp.chg.ru

Ниже представлен видеоролик, который покажет процесс настройки системных часов в Windows 7 и их синхронизацию.

Изменяем период автоматической синхронизации времени в Windows

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

Откройте окно “Выполнить ” через меню “Пуск ”. В командной строке наберите regedit и запустите кнопкой “OK ”. Вам необходимо поочередно добраться до следующего раздела

HKEY_LOCAL_MACHINE – SYSTEM - CurrentControlSet – Services - W32Time – TimeProviders – NtpClient

и выбрать в окне слева параметр SpecialPollInterval . Здесь указано значение 604800 , если перевести его в десятичную систему исчисления. Это количество секунд равное одной недели. Сюда можно занести другое значение, которое необходимо вам, сконвертировав его в секунды.

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

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

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

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

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

Для Вас также имеется на другие веб-ресурсы, которые, возможно, окажут помощь в решении Ваших вопросов.

Когда изучаешь новую технологию или язык программирования, основные понятия всегда носят относительно рутинный характер и поэтому, на мой взгляд, быстро отбивают желание обучаться у начинающих. Цель данной статьи - это заинтересовать и увлечь читателя изучением программирования на примере разработки элементарной графики в динамическом режиме. Статья подойдет для начинающих разработчиков, которые ознакомились с основами HTML5 и JavaScript , и которым наскучило видеть статический текст на страничке при выводе в консоль браузера массивов, объектов, результатов арифметических операций и т.д. Далее мы реализуем простейшую, но полезную для понимания языка анимацию.Что мы будем делать? Рассмотрим процесс создание простейших аналоговых часов средствами HTML5 и JavaScript. Рисовать часы будем графическими примитивами, не используя средств CSS . Мы вспомним немного геометрии для отображения нашей графики, вспомним немного математики для реализации логики отображения наших анимированных часов. И в целом постараемся уменьшить энтропию в познаниях языка JavaScript. Для разработки нам понадобится текстовый редактор вроде Notepad++ или Sublime Text 3 .Реализация цифровых часов Создадим три файла в текстовом редакторе. (Все три файла должны лежать в одной папке).

index.html - основная страничка
clockscript.js - скрипт с логикой работы
style.css - файл стилей

Для начала выведем текущее время в обычный div -блок в.html файл. Даже в такой маленькой задаче есть свой подводный камень. Если просто закинуть функцию отображения часов в событие onload у тега body , то текущее время отобразится в строке, но так и останется статическим. И div -блок, в который мы отправили строку с текущим временем, не будет самостоятельно обновляться.

Добиться самостоятельного обновления элемента страницы можно оборачиванием функции отображения времени в анонимный метод, который присваивается свойству onload корневого объекта Window .

Один из вариантов реализации может быть следующим. Файл index.html :

Часы Черновик по JavaScript. Работа с холстом:
Тут будет текущее время

Файл style.css :

#clock{ font-family:Tahoma, sans-serif; font-size:20px; font-weight:bold; color:#0000cc; }
Файл clockscript.js :

Window.onload = function(){ window.setInterval(function(){ var d = new Date(); document.getElementById("clock").innerHTML = d.toLocaleTimeString(); } , 1000); }
Разберемся с работой clockscript.js :

Выполняем внутренний JavaScript-код при помощи привязки к событию onload корневого объекта Window :

Window.onload = function(){/*бла-бла-бла*/}
Метод объекта объекта Window , который выполняет код через определенные промежутки времени (указанные в миллисекундах):

Window.setInterval(function(){/*Тут действия, обернутые в функцию, которую нужно выполнять каждые 1000 миллисекунд*/} , 1000);
Объект Date используется для проведения различных манипуляций с датой и временем. С помощью конструктора создаем его экземпляр и называем d :

Var d = new Date();
Находим объект DOM по его id. Это именно тот объект, в который мы хотим выводить наше время. Это может быть параграф, заголовок или еще какой-то элемент. У меня это div -блок. После получения элемента по id, используем его свойство innerHTML для получение всего содержимого элемента вместе с разметкой внутри. И передаем туда результат метода toLocaleTimeString() , который возвращает форматированное представление времени:

Document.getElementById("clock").innerHTML = d.toLocaleTimeString();
Вот, что должно получиться(время динамически изменяется каждую секунду):

Реализация аналоговых часов С этого момента мы будем использовать Canvas (HTML) , который будет служить нам холстом для творчества.

Чтобы увидеть наш холст в файле index.html внутри body мы должны где-то расположить следующий тег, сразу определив его размеры:


Теперь в файле clockscript.js , прежде чем пытаться рисовать, нужно получить контекст объекта Canvas . Сделаем это в начале нашей функции отображения часов. Тогда файл clockscript.js изменится следующим образом:

Function displayCanvas(){ var canvasHTML = document.getElementById("myCanvas"); var contextHTML = canvasHTML.getContext("2d"); contextHTML.strokeRect(0,0,canvasHTML.width, canvasHTML.height); //Тут будет вся логика часов и код отображения через графические примитивы return; } window.onload = function(){ window.setInterval(function(){ var d = new Date(); document.getElementById("clock").innerHTML = d.toLocaleTimeString(); displayCanvas(); } , 1000); }
Ну что, давайте вспоминать математику? Нам важно понять связь между делениями определенных стрелок и углом их поворота на будущем циферблате.

Угол поворота всех стрелок за 1 секунду:

  • Секундная стрелка повернется на угол - (1/60)*360 o = 6 o
  • Минутная стрелка повернется на угол - (1/60)*6 o = 0,1 o
  • Часовая стрелка повернется на угол - (1/60)*0,1 o ≈ 0,0017 o
Первая проблема:

То есть даже за 1 секунду все стрелки должны повернуться, каждая на соответствующий угол. И если это не учесть, то первый подводный камень, который мы получим в отображении, будет некрасивая анимация. К примеру, когда время будет 19:30, то часовая стрелка будет ровно показывать на 19 часов, хотя в реальной жизни она должна уже быть наполовину приближена к 20 часам. Аналогично, приятнее будет выглядеть плавное передвижение минутной стрелки. Ну а секундная стрелка пусть перещелкивается дискретными движениями, как в большинстве реальных механических часов. Решение проблемы: прибавлять к углы поворота текущей стрелки угол поворота более быстрой стрелки, домноженный на коэффициент, обозначающий его долю от угла текущей стрелки.

Реализация:

Var t_sec = 6*d.getSeconds(); //Определяем угол для секунд var t_min = 6*(d.getMinutes() + (1/60)*d.getSeconds()); //Определяем угол для минут var t_hour = 30*(d.getHours() + (1/60)*d.getMinutes()); //Определяем угол для часов
Вторая проблема:

Угол вращающегося радиус-вектора(стрелки часов) отсчитывается от положительного направления в направлении против часовой стрелки. Если мы это не учтем в нашей логике, то направим часы назад в прошлое.

И еще, отсчет часов, минут и секунд у нас происходит от цифры 12, верхнего положения. Решение проблемы: в наших формулах мы должны учесть это в качестве сдвига +π/2 (90 o). А перед значением угла ставить знак "-", чтобы часы шли именно по часовой стрелке. И, конечно, учитывать, что передача угла в градусах в тригонометрические функции языков программирования осуществляется с умножением на коэффициент "π/180 o ".

Реализация на примере секундной стрелки:

ContextHTML.moveTo(xCenterClock, yCenterClock); contextHTML.lineTo(xCenterClock + lengthSeconds*Math.cos(Math.PI/2 - t_sec*(Math.PI/180)), yCenterClock - lengthSeconds*Math.sin(Math.PI/2 - t_sec*(Math.PI/180)));
Третья проблема:

В ходе разметки рисочек циферблата нужно как-то выделить рисочки напротив часов. Всего рисочек - 60 для секунд и минут. 12 - для часов. Эти 12 должны как-то выделяться на фоне всех остальных. Также симметричность оцифровки зависит от ширины цифр. Очевидно, что цифры 10, 11 и 12 шире, чем 1, 2, 3 и т.д. Про это нужно не забыть.

Решение проблемы и вариант оцифровки циферблата:

For(var th = 1; th