Батник для синхронизации времени в windows 7

Синхронизация времени с корректировкой CMD/BAT Решение и ответ на вопрос 1973581

2 / 2 / 0

Регистрация: 19.10.2015

Сообщений: 176

1

Синхронизация времени с корректировкой

03.05.2017, 16:53. Показов 23156. Ответов 20


Здравствуйте сам я в программировании профан, но реалии жизни вынуждают. Вот решил обратиться к специалистам.
Суть моей проблемы в следующем: как с помощью (CMD/BAT) синхронизировать системное время на компьютере с сервером ntp21.vniiftri.ru (89.109.251.21) и прибавить к нему 5 секунд после синхронизации (5 секунд это для примера, нужно будет подбирать данный параметр опытным путём)? Корректировка не будет превышать 10 секунд.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Garry Galler

Эксперт Python

5403 / 3827 / 1214

Регистрация: 28.10.2013

Сообщений: 9,554

Записей в блоге: 1

04.05.2017, 00:49

2

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
@echo off
::<------------------------------------->
:: COPYRIGTH(C) Garry Galler, 2017
:: change_time: смена системного времени посредством указания смещения в секундах от текущего
:: NB!: скрипт не учитывает переход нового времени за границы 23:59:59
:: в этом случае time просто выдаст ошибку
:: батник сохранить в кодировке OEM866
:: Для восстановления правильного времени просто не указывайте offset
::<------------------------------------->
set server=ntp2.stratum2.ru                    & :: сервер для синхронизации
::>nul net stop w32time                          & :: остановка службы времени, чтобы после реконфигурации она подтянула новые параметры
>nul w32tm /config /manualpeerlist:%server%    & :: конфигурация синхронизации
>nul w32tm /config /syncfromflags:manual       & :: ручной режим - не знаю нужно ли
::2>w32tm  /config /largephaseoffset:0         & :: конфигурация максимально допустимого отставания в мск
2>nul net start w32time                        & :: запуск службы времени с новыми параметрами 
>nul  w32tm /config /update                    & :: для смены параметров без остановки службы времени
w32tm /resync                                  & :: синхронизация с указанным сервером
echo ============================
echo сервер синхронизации:
w32tm /query /source
echo ============================
 
set /p offset=[ENTER the offset in seconds]:
if "%offset%"=="" (set /a offset=0)
 
echo ============================
echo ТЕКУЩЕЕ ВРЕМЯ:%time%
echo ============================
set now=%time: =0%
for /f "tokens=1-3 delims=/-:., " %%a in ( "%now%" ) do (
    set hours=%%a   & rem часы
    set minutes=%%b & rem минуты
    set seconds=%%c & rem секунды
)
 
set /a all_seconds= (hours*3600) + (minutes*60) + seconds
echo (%hours% * 3600) + (%minutes% * 60) + %seconds% = %all_seconds%
set /a new_seconds=all_seconds + offset
echo %all_seconds% + %offset% = %new_seconds%
 
set /a seconds = %new_seconds%
set /a hours = seconds/3600 
set /a minutes = (seconds - (hours*3600))/60
set /a seconds = (seconds - (hours*3600) - (minutes*60))
 
set new_time=%hours%:%minutes%:%seconds%
echo ============================
echo НОВОЕ ВРЕМЯ: %new_time%
echo ============================
echo time before: %time%
echo time new:    %new_time%
time %new_time%
echo time after:  %time%
pause&exit /b

——————————
Updated.
Изменил блок синхронизации. Чтобы новый сервер подтягивался службой времени ее нужно либо останавливать и после реконфигурации перезапускать, либо использовать параметр /update в w32tm.



2



2 / 2 / 0

Регистрация: 19.10.2015

Сообщений: 176

04.05.2017, 07:59

 [ТС]

3

Спасибо, всё работает как нужно. С некоторыми параметрами (служб) поэкспериментирую.

Добавлено через 3 часа 59 минут
А как добавить не целые секунды, а с десятыми долями?



0



Эксперт Python

5403 / 3827 / 1214

Регистрация: 28.10.2013

Сообщений: 9,554

Записей в блоге: 1

04.05.2017, 10:35

4

Цитата
Сообщение от lapin9126
Посмотреть сообщение

как добавить не целые секунды, а с десятыми долями?

Просто добавить доли не получится — cmd работает только с целыми числами.
Поэтому нужно формулу расчета времени переводить на миллисекунды — тогда и итоговое время будет с миллисекундами.
Немного попозже попробую перевести.



0



2 / 2 / 0

Регистрация: 19.10.2015

Сообщений: 176

04.05.2017, 10:42

 [ТС]

5

Заранее благодарен вам за оказанную помощь. Без вас я бы ни за что не не осилил этот вопрос. Если в VBA хоть что-то понятно, то в (CMD/BAT) для меня просто набор знаков



0



Garry Galler

Эксперт Python

5403 / 3827 / 1214

Регистрация: 28.10.2013

Сообщений: 9,554

Записей в блоге: 1

04.05.2017, 10:51

6

В принципе, если вам точный перевод времени не нужен — достаточно просто к итоговой строке времени

Windows Batch file
1
set new_time=%hours%:%minutes%:%seconds%

добавить нужное число миллисекунд

Windows Batch file
1
set new_time=%hours%:%minutes%:%seconds%,25   :: 25 миллисекунд



1



lapin9126

2 / 2 / 0

Регистрация: 19.10.2015

Сообщений: 176

04.05.2017, 11:27

 [ТС]

7

Спасибо, всё гениальное-просто!!!!!!

Добавлено через 22 минуты
Для корректного суммирования поменял параметр

Windows Batch file
1
set now=%time: =0%

на

Windows Batch file
1
set now=%time%



0



Garry Galler

Эксперт Python

5403 / 3827 / 1214

Регистрация: 28.10.2013

Сообщений: 9,554

Записей в блоге: 1

04.05.2017, 12:21

8

Цитата
Сообщение от lapin9126
Посмотреть сообщение

Для корректного суммирования поменял параметр

А вот здесь я не понял :-) Здесь делается замена возможного пробела в числах на 0 (пробел вместо ведущего ноля может появляться во времени до 10 утра).
————————————
Формулу на миллисекунды на перевел, однако подстановка результата дает странный эффект:
Ввожу 1500 миллисекунд.

Код

============================
[ENTER the offset in milliseconds]:1500
============================
ТЕКУЩЕЕ ВРЕМЯ:12:02:59,70
============================
(12    * 3600 * 1000) + (02  * 60 * 1000) + (59  * 1000) + 70 = 43379070
43379070 + 1500 = 43380570
============================
НОВОЕ ВРЕМЯ: 12:3:0,57
============================
time before: 12:02:59,70
time new:    12:3:0,57
time after:  12:03:00,05

Windows Batch file
1
2
3
4
5
6
7
set /a milliseconds = %new_milliseconds%
set /a hours=milliseconds/3600000 
set /a minutes=(milliseconds - (hours*3600*1000))/60/1000
set /a seconds=(milliseconds - (hours*3600*1000) - (minutes*60*1000))/1000
set /a milliseconds=milliseconds - (hours*3600*1000) - (minutes*60*1000) - seconds*1000
 
set new_time=%hours%:%minutes%:%seconds%,%milliseconds:~0,2%

Формула переводит все в миллисекунды, суммирует и конвертирует обратно в часыминутысекундымиллисекунды. И вроде все делает правильно.
Новое время должно быть 12:3:0,57, однако time делает из 57 сотых => 5 сотых. И так постоянно.
Где тут косяк :-)?



0



Любознательный

3222 / 862 / 231

Регистрация: 10.03.2016

Сообщений: 2,038

04.05.2017, 12:30

9

Garry Galler,

Цитата
Сообщение от Garry Galler
Посмотреть сообщение

Где тут косяк :-)?

Возможно, не причина, но тем не менее…на первый взгляд:

Цитата
Сообщение от Garry Galler
Посмотреть сообщение

(12 * 3600 * 1000)

Вот здесь, какие-такие единицы мы получим?
ч*мин*мсек



0



Эксперт Python

5403 / 3827 / 1214

Регистрация: 28.10.2013

Сообщений: 9,554

Записей в блоге: 1

04.05.2017, 13:50

10

YuS_2,
Ну здесь — (12 * 3600 * 1000) — должно получиться целое число миллисекунд равное 12 часам=43200000.
Разве нет?

Добавлено через 5 минут
А вот с прибавлением

+ 70

похоже косяк. Там же доли: 70 это 0.7, то есть 700 мск.

Добавлено через 44 минуты
А еще косяк, что числа типа 08 и 09 будут cmd забракованы из-за ведущего ноля. Но это понятно как исправить: добавлением единицы и вычитанием 100.



0



Любознательный

3222 / 862 / 231

Регистрация: 10.03.2016

Сообщений: 2,038

04.05.2017, 13:55

11

Цитата
Сообщение от Garry Galler
Посмотреть сообщение

Разве нет?

Да, верно … это я тут по диагонали, одним глазом форум читаю
3600 равно 60*60, вот где секунды потерялись у меня



0



2 / 2 / 0

Регистрация: 19.10.2015

Сообщений: 176

04.05.2017, 14:12

 [ТС]

12

Это я не вовремя проверял, надо утром с 8 до 10 тестировать.



0



Garry Galler

Эксперт Python

5403 / 3827 / 1214

Регистрация: 28.10.2013

Сообщений: 9,554

Записей в блоге: 1

04.05.2017, 14:25

13

lapin9126,
Просто замените в коде цикл на этот:

Windows Batch file
1
2
3
4
5
6
set now=%time: =0%
for /f "tokens=1-3 delims=/-:., " %%a in ( "%now%" ) do (
    set /a hours=1%%a-100        & rem часы
    set /a minutes=1%%b-100      & rem минуты
    set /a seconds=1%%c-100      & rem секунды
)

Здесь ненужные ведущие ноли будут убираться и ошибки не случится.
Миллисекунды добавляйте как вы это делаете сейчас — просто помните, что на самом деле вы добавляете не целое число, а сотые доли от секунды.
———————————-
Что касается формулы перевода в миллисекунды: мне кажется тут бессмысленно бодаться с time — она воспринимает целое число миллисекунд, которое точно высчитывает формула, как сотую долю от секунды — то есть автоматом это число делит на 100, вместо того, чтобы принять то, что ей дают как готовый отформатированный набор чисел.



0



lapin9126

2 / 2 / 0

Регистрация: 19.10.2015

Сообщений: 176

04.05.2017, 14:44

 [ТС]

14

Я правильно понял конечный код должен быть такой:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
@echo off
::<------------------------------------->
:: COPYRIGTH(C) Garry Galler, 2017
:: change_time: смена системного времени посредством указания смещения в секундах от текущего
:: NB!: скрипт не учитывает переход нового времени за границы 23:59:59
:: в этом случае time просто выдаст ошибку
:: батник сохранить в кодировке OEM866
:: Для восстановления правильного времени просто не указывайте offset
::<------------------------------------->
set server=ntp2.stratum2.ru                    & :: сервер для синхронизации
::>nul net stop w32time                          & :: остановка службы времени, чтобы после реконфигурации она подтянула новые параметры
>nul w32tm /config /manualpeerlist:%server%    & :: конфигурация синхронизации
>nul w32tm /config /syncfromflags:manual       & :: ручной режим - не знаю нужно ли
::2>w32tm  /config /largephaseoffset:0         & :: конфигурация максимально допустимого отставания в мск
2>nul net start w32time                        & :: запуск службы времени с новыми параметрами 
>nul  w32tm /config /update                    & :: для смены параметров без остановки службы времени
w32tm /resync                                  & :: синхронизация с указанным сервером
echo ============================
echo сервер синхронизации:
w32tm /query /source
echo ============================
 
set /p offset=[ENTER the offset in seconds]:
if "%offset%"=="" (set /a offset=0)
 
echo ============================
echo ТЕКУЩЕЕ ВРЕМЯ:%time%
echo ============================
set now=%time: =0%
for /f "tokens=1-3 delims=/-:., " %%a in ( "%now%" ) do (
    set /a hours=1%%a-100        & rem часы
    set /a minutes=1%%b-100      & rem минуты
    set /a seconds=1%%c-100      & rem секунды
)
 
set /a all_seconds= (hours*3600) + (minutes*60) + seconds
echo (%hours% * 3600) + (%minutes% * 60) + %seconds% = %all_seconds%
set /a new_seconds=all_seconds + offset
echo %all_seconds% + %offset% = %new_seconds%
 
set /a seconds = %new_seconds%
set /a hours = seconds/3600 
set /a minutes = (seconds - (hours*3600))/60
set /a seconds = (seconds - (hours*3600) - (minutes*60))
 
set new_time=%hours%:%minutes%:%seconds%,25   & :: 25 миллисекунд
echo ============================
echo НОВОЕ ВРЕМЯ: %new_time%
echo ============================
echo time before: %time%
echo time new:    %new_time%
time %new_time%
echo time after:  %time%
pause&exit /b



0



Эксперт Python

5403 / 3827 / 1214

Регистрация: 28.10.2013

Сообщений: 9,554

Записей в блоге: 1

04.05.2017, 15:24

15

Да, пока это все что я могу предложить.
P.S. Пробелы в присвоениях переменных —

до и после знака равно

— лучше убрать. Они в батниках как минимум нежелательны, как максимум приводят к ошибкам, хотя при сложении чисел вроде не влияют. Это у меня python code style уже мешает батники правильно писать :-)



0



2 / 2 / 0

Регистрация: 19.10.2015

Сообщений: 176

05.05.2017, 04:22

 [ТС]

16

Хорошо, подправлю. Еще раз благодарю за помощь.

Добавлено через 12 часов 15 минут
Протестировал сегодня утром с 8 часов. 08 в CMD считает 8-ричной системой счисления и вот что получается. Надо искать альтернативный метод.

Отправка команды синхронизации на локальный компьютер
Команда выполнена успешно.
============================
сервер синхронизации:
ntp2.stratum2.ru
============================
[ENTER the offset in seconds]:5
============================
ТЕКУЩЕЕ ВРЕМЯ: 8:19:00,15
============================
(08 * 3600) + (19 * 60) + 00 = 1140
1140 + 5 = 1145
============================
НОВОЕ ВРЕМЯ: 0:19:5
============================
time before: 8:19:00,16
time new: 0:19:5
time after: 0:19:04,99
Для продолжения нажмите любую клавишу . . .



0



Эксперт Python

5403 / 3827 / 1214

Регистрация: 28.10.2013

Сообщений: 9,554

Записей в блоге: 1

05.05.2017, 15:10

17

lapin9126,

Синхронизация времени с корректировкой

Откуда у вас ведущий ноль, если батник его исключает операций вычитания 108 — 100=8?



0



lapin9126

2 / 2 / 0

Регистрация: 19.10.2015

Сообщений: 176

05.05.2017, 15:47

 [ТС]

18

Да кто его знает. Может в коде что-то не так. Спасибо за помощь. Пытаюсь на VBS написать.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
@echo off
::<------------------------------------->
:: COPYRIGTH(C) Garry Galler, 2017
:: change_time: смена системного времени посредством указания смещения в секундах от текущего
:: NB!: скрипт не учитывает переход нового времени за границы 23:59:59
:: в этом случае time просто выдаст ошибку
:: батник сохранить в кодировке OEM866
:: Для восстановления правильного времени просто не указывайте offset
::<------------------------------------->
::set offset=6                                   & :: секунды коррекции после подбора
set server=ntp2.stratum2.ru                    & :: сервер для синхронизации
::>nul net stop w32time                        & :: остановка службы времени, чтобы после реконфигурации она подтянула новые параметры
>nul w32tm /config /manualpeerlist:%server%    & :: конфигурация синхронизации
>nul w32tm /config /syncfromflags:manual       & :: ручной режим - не знаю нужно ли
::2>w32tm  /config /largephaseoffset:0         & :: конфигурация максимально допустимого отставания в мск
2>nul net start w32time                        & :: запуск службы времени с новыми параметрами 
>nul  w32tm /config /update                    & :: для смены параметров без остановки службы времени
w32tm /resync                                  & :: синхронизация с указанным сервером
echo ============================
echo сервер синхронизации:
w32tm /query /source
echo ============================
 
set /p offset=[ENTER the offset in seconds]: & :: секунды коррекции методом подбора
if "%offset%"=="" (set /a offset=0)
 
echo ============================
echo ТЕКУЩЕЕ ВРЕМЯ:%time%
echo ============================
set now=%time: =0%
for /f "tokens=1-3 delims=/-:., " %%a in ( "%now%" ) do (
    set hours=%%a   & rem часы
    set minutes=%%b & rem минуты
    set seconds=%%c & rem секунды
)
 
set /a all_seconds=(hours*3600) + (minutes*60) + seconds
echo (%hours% * 3600) + (%minutes% * 60) + %seconds% = %all_seconds%
set /a new_seconds=all_seconds + %offset%
echo %all_seconds% + %offset% = %new_seconds%
 
set /a seconds=%new_seconds%
set /a hours=seconds/3600 
set /a minutes=(seconds - (hours*3600))/60
set /a seconds=(seconds - (hours*3600) - (minutes*60))
 
set new_time=%hours%:%minutes%:%seconds%
echo ============================
echo НОВОЕ ВРЕМЯ: %new_time%
echo ============================
echo time before: %time%
echo time new:    %new_time%
time %new_time%
echo time after:  %time%
pause&exit /b



0



Эксперт Python

5403 / 3827 / 1214

Регистрация: 28.10.2013

Сообщений: 9,554

Записей в блоге: 1

05.05.2017, 15:59

19

lapin9126,
Ну вы же используете

первую версию кода

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

правильную версию кода

, в которую внесены мои поправки переменных. И эту версию вы почему-то НЕ используете…



0



2 / 2 / 0

Регистрация: 19.10.2015

Сообщений: 176

05.05.2017, 16:17

 [ТС]

20

Прошу прощения, с утра наверно еще не проснулся и не то скопировал.



0



E-mail

Печать


31 Августа 2011

Серер синхронизации времени в WindowsВозникла необходимость синхронизации времени на компьютерах в локальной сети на стандартном 123 UDP порту?
Или как я настраивал сервер NTP в локальной сети на Windows хосте.

Ситуация следующая: в одноранговой локальной сети есть одна Windows машина которая ходит в нтернет и синхронизирует время, например с time.nist.gov.
Рабочие станции этой сети не ходят в Интернет, или им запрещено синхронизироваться, или вы не хотите дополнительный трафик по UDP 123 порту наружу, или есть проблемы синхронизации времени с популярных интернет ntp cерверов. C помощью этой статьи вы настроите синхронизацию времени в среде Windows и настроите NTP сервер на обычной Windows машине.

Сервер синхронизации времени ntp может работать на Windows 2000, Windows XP Prof, Windows 7, Windows Server 2003/2008 .

Итак, приступаем к настойке локального Windows сервера синхронизации времени (NTP server на 123 UDP порту).

Начнем с ОС Windows XP Prof (Windows XP Home — то же самое).

Открываем реестр — Пуск -> выполнить -> regedit
идем в ветку:

 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeConfig

присваеваем параметру AnnounceFlags значение 5. Тем самым мы обьявим наш будущий NTP сервер, достоверным и компьютеры при синхронизации с ним не будут ругаться.
Далее Пуск -> выполнить -> mmc и добавляем оснастку «Редактор обьекта групповой полтики». Обьектом группвой политики выступит Локальный компьютер.

Идем по разделам Конфигурация компьютера -> Администрантивные шаблоны -> Система -> Служба времени Windows -> Поставщики времени. Там находим «Включить Windows NTP-сервер» и в свойствах выбираем позицию «включить». В заключении проходим в Службы, ищем «Служба времени Windows» и перезапускаем этот сервис. Если он не включен, то включаем его и ставим тип запуска «Авто».

Кроме этого на раздающем сервере необходимо изменить интервал через который он сам будет ходить в инет за временем.
Открываем реестр — Пуск -> выполнить -> regedit
идем в ветку:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProviders
NtpClientSpecialPollInterval

По умолчанию интервал между обновлениями времени в Windows – 1 неделя (604800 сек). При низкой точности системных часов компьютера это слишком большой интервал. При такой настройке за 1 неделю часы Вашего компьютера могут получить погрешность величиной порядка минуты или даже нескольких минут. Рекомендую уменьшить интервал обновления до нескольких часов. Это изменение не увеличит ни трафика, ни нагрузки на NTP-сервер, при этом позволит поддерживать более высокую точность хода часов Вашего компьютера.

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

w32tm /config /update

И при необходимости выполнить немедленную синхронизацию

w32tm /resync

На этом настройка сервера закончена.

На клиентских компьютерах следуем в «Панель управления», выбираем «дата и время» и в закладке «Время интернета» меняем строку сервер на IP (или имя) вашего локального сервера.
Вот и все.

Можно раскидать батник на рабочие станции:
w32tm /config /manualpeerlist:IP_адрес_сервера,0x1 /syncfromflags:MANUAL
net stop w32time
net start w32time
w32tm /resync

И запускаем его на клиентских машинах с правами Администратора.


Для WINDOWS 2000

Теперь поясню, как установить синхронизацию основного компьютера времени, т. е. корневого PDC-эмулятора леса, с реальным временем. Для этого следует Пуск -> выполнить -> ввести команду:

net time /setsntp:

Параметр /setsntp команды Net Time показывает, что используется Simple Network Time Protocol (SNTP), стандартный протокол Internet. Internet Engineering Task Force (IETF) Request for Comments (RFC-2030), датированный октябрем 1996 г., определяет SNTP. Можно указать любой сервер времени SNTP в Internet для корневого PDC-эмулятора леса и заставить его синхронизировать свое время с временем этого сервера. Многие брандмауэры включают сервер времени, так что для конкретного контроллера — эмулятора PDC — нет нужды обращаться куда-либо из своей внутренней сети для синхронизации с SNTP-сервером. Но если брандмауэр требуется настраивать, то нужно иметь в виду, что SNTP использует 123-й порт UDP.

Остановит сервер времени

Windows Time Service:

net stop w32time

Затем можно проверить время источника, для чего следует ввести:

w32tm -once

чтобы установить время от источника времени однократно (по умолчанию W32tm обновляет время периодически). Система выдает страницу запутанной информации; в случае успешного выполнения команды в одной из строк появится Recv`ed from server 48 Bytes. Далее необходимо набрать:

net start w32time

чтобы снова запустить службу времени.

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

Если неизвестно, с каким SNTP-сервером синхронизируется система, в командной строке следует ввести:

net time /querysntp

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

Ручная настройка сервера на рабочей станции Windows.

1. Клик на часах в трее

2. Изменить дату и время

3. Время интернет — Изменить натройки.

4. Впечатайте IP адрес или DNS имя вашего локального NTP сервера, или публичные рабочие сервера времени.

Мировые рабочие сервера времени для синхронизации времени:
0.pool.ntp.org
1.pool.ntp.org
2.pool.ntp.org
3.pool.ntp.org

5. Сохраняем все

как синхронизировать время в Windows

Тестирование программного обеспечения (SQA)< Предыдущая

  Следующая >Казбекиада 2011

Синхронизируем время в Windows 7

Содержание

  • Процедура синхронизации
    • Способ 1: синхронизация времени при помощи сторонних программ
    • Способ 2: синхронизация в окне «Дата и время»
    • Способ 3: командная строка
  • Вопросы и ответы

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

Процедура синхронизации

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

Способ 1: синхронизация времени при помощи сторонних программ

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

Скачать SP TimeSync

  • После запуска установочного файла, который расположен в скачанном архиве, открывается приветственное окно инсталлятора. Щелкните «Next».
  • Синхронизируем время в Windows 7

  • В следующем окне требуется определить, в какое место на компьютере будет инсталлировано приложение. По умолчанию это папка программ на диске C. Без существенной необходимости не рекомендуется изменять данный параметр, так что просто щелкайте «Next».
  • Синхронизируем время в Windows 7

  • В новом окне сообщается о том, что SP TimeSync будет установлен на ваш компьютер. Жмите «Next» для запуска инсталляции.
  • Синхронизируем время в Windows 7

  • Запускается процесс инсталляции SP TimeSync на ПК.
  • Синхронизируем время в Windows 7

  • Далее открывается окно, в котором говорится об окончании установки. Для его закрытия щелкните «Close».
  • Синхронизируем время в Windows 7

  • Для запуска приложения щелкните по кнопке «Пуск» в нижнем левом углу экрана. Далее перейдите по наименованию «Все программы».
  • Синхронизируем время в Windows 7

  • В открывшемся перечне установленного софта ищите папку SP TimeSync. Чтобы перейти к дальнейшим действиям, щелкните по ней.
  • Синхронизируем время в Windows 7

  • Отобразится иконка SP TimeSync. Кликните по указанному значку.
  • Синхронизируем время в Windows 7

  • Данное действие инициирует запуск окошка приложения SP TimeSync во вкладке «Время». Пока что в окошке отображается только локальное время. Чтобы отобразилось серверное, время щелкните по кнопке «Получить время».
  • Синхронизируем время в Windows 7

  • Как видим, теперь одновременно в окошке SP TimeSync отображается и локальное, и серверное время. Также отображаются такие показатели, как разница, задержка, старт, версия NTP, точность, актуальность и источник (в виде IP-адреса). Для того, чтобы синхронизировать компьютерные часы, нажмите «Задать время».
  • Синхронизируем время в Windows 7

  • После данного действия локальное время ПК приведено в соответствии с серверным, то есть, синхронизировано с ним. Все остальные показатели сброшены. Чтобы снова сравнить локальное время с серверным, опять нажмите «Получить время».
  • Синхронизируем время в Windows 7

  • Как видим, на этот раз разница совсем маленькая (0,015 сек). Это обусловлено тем, что синхронизация проводилась совсем недавно. Но, конечно, не очень удобно каждый раз синхронизировать время на компьютере вручную. Чтобы настроить этот процесс автоматически, перейдите во вкладку «NTP-клиент».
  • Синхронизируем время в Windows 7

  • В поле «Получать каждые» можно указать промежуток времени в числах, через который часы будут автоматически синхронизированы. Рядом в раскрывающемся списке существует возможность выбрать единицу измерения:
    • Секунды;
    • Минуты;
    • Часы;
    • Сутки.

    К примеру, зададим интервал в 90 секунд.

    В поле «NTP сервер» при желании можно указать адрес любого другого сервера синхронизации, если тот, который установлен по умолчанию (pool.ntp.org) вам по каким-то причинам не подходит. В поле «Локальный порт» лучше не вносить изменения. По умолчанию там установлено число «0». Это означает, что программа подключается к любому свободному порту. Это наиболее оптимальный вариант. Но, конечно, если вы по определенным причинам желаете назначить для SP TimeSync определенный номер порта, то можете это сделать, вписав его в данное поле.

  • Синхронизируем время в Windows 7

  • Кроме того, в этой же вкладке расположены настройки управления точностью, которые доступны в версии Pro:
    • Время попытки;
    • Число успешных попыток;
    • Предельное число попыток.

    Но, так как мы описываем бесплатную версию SP TimeSync, то останавливаться на этих возможностях не будем. А для дальнейшей настройки программы переместимся во вкладку «Параметры».

  • Синхронизируем время в Windows 7

  • Тут, прежде всего, нас интересует пункт «Запускать при старте Windows». Если вы желаете, чтобы SP TimeSync автоматически запускался при старте компьютера, а не делать это каждый раз вручную, то около указанного пункта поставьте галочку. Кроме того, можно установить галочки напротив пунктов «Сворачивать иконку в трее» и «Запускать со свернутым окном». Установив данные настройки, вы даже не будет замечать, что программа SP TimeSync работает, так как все действия по синхронизации времени через установленный интервал она будет проводить в фоновом режиме. Окно нужно будет вызвать только в том случае, если вы решите произвести корректировку ранее выставленных настроек.

    Кроме этого, для пользователей версии Pro доступна возможность использования протокола IPv6. Для этого нужно просто установить галочку около соответствующего пункта.

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

  • Синхронизируем время в Windows 7

    Таким образом, мы настроили программу SP TimeSync. Теперь каждые 90 секунд будет происходить автоматическое обновление времени Windows 7 в соответствии с серверным временем, причем все это выполняется в фоновом режиме.

    Способ 2: синхронизация в окне «Дата и время»

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

  • Кликните по системным часам, расположенным в нижнем углу экрана. В открывшемся окне переместитесь по надписи «Изменение настроек даты и времени».
  • Синхронизируем время в Windows 7

  • После запуска окна перейдите в раздел «Время по Интернету».
  • Синхронизируем время в Windows 7

  • Если в данном окне указано, что компьютер не настроен на автоматическую синхронизацию, то в этом случае щелкните по надписи «Изменить параметры…».
  • Синхронизируем время в Windows 7

  • Запускается окно настройки. Установите галочку около пункта «Синхронизировать с сервером времени в интернете».
  • Синхронизируем время в Windows 7

  • После выполнения данного действия поле «Сервер», которое до этого было неактивным, становится активным. Кликните по нему, если желаете выбрать сервер отличный от того, который установлен по умолчанию (time.windows.com), хотя это не обязательно. Выберите подходящий вариант.
  • Синхронизируем время в Windows 7

  • После этого можно провести немедленную синхронизацию с сервером, нажав «Обновить сейчас».
  • Синхронизируем время в Windows 7

  • После выполнения всех настроек жмите «OK».
  • Синхронизируем время в Windows 7

  • В окне «Дата и время» тоже жмите «OK».
  • Синхронизируем время в Windows 7

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

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

    Если вы все-таки приняли решение вносить изменения, то вызовите окно «Выполнить», набрав комбинацию Win+R. В поле данного окошка впишите команду:

    Regedit

    Щелкните «OK».

  • Синхронизируем время в Windows 7

  • Открывается окно редактора системного реестра Windows 7. В левой его части расположены разделы реестра, представленные в виде размещенных в древовидной форме каталогов. Перейдите в раздел «HKEY_LOCAL_MACHINE», дважды кликнув по его наименованию левой кнопкой мыши.
  • Синхронизируем время в Windows 7

  • Далее таким же образом перейдите последовательно в подразделы «SYSTEM», «CurrentControlSet» и «Services».
  • Синхронизируем время в Windows 7

  • Открывается очень большой перечень подразделов. Ищите в нем наименование «W32Time». Кликните по нему. Далее перейдите в подразделы «TimeProviders» и «NtpClient».
  • Синхронизируем время в Windows 7

  • В правой части редактора реестра представлены параметры подраздела «NtpClient». Кликните дважды по параметру «SpecialPollInterval».
  • Синхронизируем время в Windows 7

  • Запускается окно изменения параметра «SpecialPollInterval».
  • Синхронизируем время в Windows 7

  • По умолчанию значения в нем заданы в шестнадцатеричной системе исчисления. С данной системой хорошо работать компьютеру, но для обычного пользователя она непонятна. Поэтому в блоке «Система исчисления» переводите переключатель в положение «Десятичная». После этого в поле «Значение» отобразится число 604800 в десятичной системе измерения. Это число отображает количество секунд, через которые производится синхронизация часов ПК с сервером. Нетрудно подсчитать, что 604800 секунд равно 7 дням или 1 неделе.
  • Синхронизируем время в Windows 7

  • В поле «Значение» окна изменения параметра «SpecialPollInterval» вписываем время в секундах, через которое мы желаем синхронизировать часы компьютера с сервером. Конечно, желательно, чтобы данный интервал был меньше, чем тот, который установлен по умолчанию, а не больше. Но это уже каждый пользователь решает для себя сам. Мы же в качестве примера установим значение 86400. Таким образом, процедура синхронизации будет выполняться 1 раз в сутки. Жмем «OK».
  • Синхронизируем время в Windows 7

  • Теперь можно закрывать окно редактора реестра. Щелкните по стандартному значку закрытия в верхнем правом углу окна.
  • Синхронизируем время в Windows 7

    Таким образом, мы настроили автоматическую синхронизацию локальных часов ПК со временем сервера с периодичностью 1 раз в день.

    Способ 3: командная строка

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

  • Но даже использование учетного имени с административными возможностями не позволит запустить командную строку обычным способом с помощью введения выражения «cmd» в окне «Выполнить». Для запуска командной строки от лица администратора, жмите «Пуск». В списке выберите «Все программы».
  • Синхронизируем время в Windows 7

  • Запускается перечень приложений. Кликните по папке «Стандартные». В ней будет располагаться объект «Командная строка». Щелкните правой кнопкой мыши по указанному наименованию. В контекстном списке остановите выбор на позиции «Запуск от имени администратора».
  • Синхронизируем время в Windows 7

  • Происходит открытие окна командной строки.
  • Синхронизируем время в Windows 7

  • В строку после названия учетной записи следует вставить следующее выражение:

    w32tm /config /syncfromflags:manual /manualpeerlist:time.windows.com

    В данном выражении значение «time.windows.com» означает адрес сервера, с которым будет выполнена синхронизация. Если вы хотите, то можете заменить его на любой другой, например, «time.nist.gov» или «timeserver.ru».

    Конечно, вбивать вручную в командную строку данное выражение не слишком удобно. Его можно скопировать и вставить. Но дело в том, что командная строка не поддерживает стандартные способы вставки: через Ctrl+V или контекстное меню. Поэтому многие пользователи думают, что вставка в данном режиме вообще не работает, но это не так.

    Скопируйте с сайта вышеуказанное выражение любым стандартным способом (Ctrl+C или через контекстное меню). Перейдите в окно командной строки и щелкните по её логотипу в левом углу. В открывшемся списке последовательно перейдите по пунктам «Изменить» и «Вставить».

  • Синхронизируем время в Windows 7

  • После того, как выражение вставлено в командную строку, жмите Enter.
  • Синхронизируем время в Windows 7

  • Вслед за этим должно появиться сообщение, что команда успешно выполнена. Закройте окно, щелкнув на стандартный значок закрытия.
  • Синхронизируем время в Windows 7

  • Если теперь перейти во вкладку «Время по интернету» в окне «Дата и время», как мы это уже делали во втором способе решения задачи, то увидим информацию, что компьютер настроен на автосинхронизацию часов.
  • Синхронизируем время в Windows 7

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

    Выкладываю bat-скрипт для быстрой настройки ntp-клиента Windows. Написал его для себя и решил поделиться.

    Принцип работы:

    • запускаем скрипт от имени администратора (актуально для семейства Windows старше XP).
    • вводим адрес ntp сервера который хотим задать.
    • вводим время периода обновлений времени в минутах.
    • ждем выполнения, и наблюдаем результат выполнения в консоли.

    Код bat файла

    @echo off
    rem Скрипт настройки NTP клиента Windows
    echo Скрипт настройки NTP клиента Windows
    echo.
    
    rem -- ввод адреса NTP сервера
    set /p ntp_server="Введите адрес NTP сервера: "
    
    rem -- ввод периуда обновления времени в минутах
    set /p ntp_update="Задайте периуд обновления (min): "
    
    rem -- задаем в качестве сервера по умолчанию 0 элемент
    echo.
    echo =======================================================
    echo Задаем в качестве сервера по умолчанию 0 элемент
    REG ADD HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionDateTimeServers /ve /t REG_SZ /d 0 /f
    
    rem -- редактируем значение сервера обновлений из списка под новером 0
    echo.
    echo =======================================================
    echo Изменяем текущие значение сервера обновлений списка серверов на %ntp_server%
    REG ADD HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionDateTimeServers /v 0 /t REG_SZ /d %ntp_server% /f
    
    rem -- включаем NTP клиент
    echo.
    echo =======================================================
    echo Включаем NTP клиент
    REG ADD HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeParameters /v Type /t REG_SZ /d NTP /f
    
    rem -- задаем текущий сервер обновления
    echo.
    echo =======================================================
    echo Задаем текущий сервер обновления %ntp_server%
    REG ADD HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeParameters /v NtpServer /t REG_SZ /d %ntp_server%,0x9 /f
    
    rem -- устонавливаем периуд обновления
    echo.
    echo =======================================================
    echo Устонавливаем периуд обновления %ntp_update% минут
    rem -- перевод времени в секунды
    set /a ntp_update*=60
    REG ADD HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpClient /v SpecialPollInterval /t REG_DWORD /d %ntp_update% /f
    
    rem -- задаем службе времени автоматический запуск
    echo.
    echo =======================================================
    echo Задаем службе времени автоматический запуск 
    sc config w32time start= auto
    
    rem -- запускаем/перезапускаем незапущеную/зупущеную службу времени 
    echo. && echo======================================================= && echo Попытка перезапуска службы времени && echo. && sc stop w32time && PING -n 5 -w 1000 127.0.0.1 >nul && sc start w32time || echo. && echo ======================================================= && echo Попытка запуска службы времени && echo. && sc start w32time 
    
    echo.
    pause
    

    Результат работы

    image

    P.S.: Не забываем выставить в редакторе кодировку создаваемого bat файла в OEM 866 для корректного отображения кириллических символов.

    You can’t comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.


    This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
    Learn more about bidirectional Unicode characters

    Show hidden characters

    Rem run as administrator
    @echo on & @setlocal enableextensions
    @echo =========================
    @echo Turn off the time service
    net stop w32time
    @echo ======================================================================
    @echo Set the SNTP (Simple Network Time Protocol) source for the time server
    w32tm /config /syncfromflags:manual /manualpeerlist:«0.it.pool.ntp.org 1.it.pool.ntp.org 2.it.pool.ntp.org 3.it.pool.ntp.org«
    @echo =============================================
    @echo … and then turn on the time service back on
    net start w32time
    @echo =============================================
    @echo Tell the time sync service to use the changes
    w32tm /config /update
    @echo =======================================================
    @echo Reset the local computer’s time against the time server
    w32tm /resync /rediscover
    @endlocal & @goto :EOF

    В Windows есть отличное средство управления синхронизацией времени — w32tm. Управление которым осуществляется как через cmd, так и через реестр и даже групповые политики в домене Windows.
    В этой статье — мы рассмотрим только первый вариант.

    • w32tm /register Регистрация и включение службы со стандартными параметрами.
    • w32tm /unregister — Отключение службы и удаление параметров конфигурации.
    • w32tm /monitor — Просмотр информации по домену.
    • w32tm /resync — Команда принудительной синхронизации с заданным в конфигурации источником.
    • w32tm /config /update — Применить и сохранить конфигурацию.
    • w32tm /config /syncfromflags:domhier /update – Задаем настройку синхронизации с контроллером домена.
    • w32tm /config /syncfromflags:manual /manualpeerlist:time.windows.com – задать конкретные источники синхронизации времени по протоколу NTP.

    Просмотр параметров (/query)

    • w32tm /query /computer:<target>  — Информация о стутусе синхронизации определенной станции (если имя не указано — используется локальный компьютер).
    • w32tm /query /Source – Показать источник времени.
    • w32tm /query /Configuration — Вывод всех настроек службы времени Windows.
    • w32tm /query /Peers – Показать источники времени и их состояние.
    • w32tm /query /Status – Статус службы времени.
    • w32tm /query /Verbose – Подробный вывод всей информации о работе службы.

    Синхронизация через Net time

    Так же можно воспользоватся вспомогательной службой net time для синхронизации времени.

    • net time /setsntp:time.itmake.org — Задаем источник синхронизации.
    • net time /querysntp — просмотр информации о заданном источнике времени.
    • net time \server.lan.local /set /y – Принудительная синхронизация с указанного источника.

    Проверить синхронизируются ли часы локального компьютера с каким-нибудь сервером можно командой

    w32tm /query /status

    Компьютеры, включенные в домен, по умолчанию синхронизируют свои часы с контроллером домена.

    Настройка синхронизации часов

    — Проверяем запущена ли «Служба времени»:

    C:> services.msc

    — Можно запустить вручную, но лучше настроить службу для запуска автоматически. Если в ручную, то:

    С:> net start w32time

    — Для регистрации, как службы и добавления стандартной конфигурации в реестр:

    С:> w32tm /register

    — Создаём командный файл timesync.bat, который настроит синхронизацию времени с локальным сервером 10.0.0.85. Скрипт необходимо выполнить с административными правами.

    @echo off
    rem This will synchronize time with server 10.0.0.85
    rem
    rem To ensure time service is up run services.msc
    rem In Russian it calls "Служба времени Windows"
    rem In register:
    rem HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeParameters
    rem
    
    echo -- This script will synchronize time with server 10.0.0.85. Current status:
    w32tm /query /status
    w32tm /tz
    
    echo -- Press Ctrl+C if you don't want synchronization or any key otherwise.
    pause > null
    
    echo -- Set time server
    w32tm /config /manualpeerlist:10.0.0.85 /syncfromflags:manual /reliable:yes /update
    
    echo -- New settings:
    w32tm /query /status
    
    echo -- Press any key to exit.
    pause > null
    

    и запускаем его на каждом компьютере, где хотим синхронизировать время с сервером. Сам сервер, в свою очередь, можно синхронизировать через Интернет.

    Также можно наблюдать текущую разницу во времени с удалённым компьютером:

    w32tm /stripchart /computer:10.0.0.85 /samples:3 /dataonly

    Раньше вместо w32tm использовалась команда net time.

    Соответсвие команд w32tm и net time

    w32tm net time
    Запрос текущего состояния синхронизации: сервер, расхождение и т.д.
    w32tm /query /status net time /querysntp
    Принудительная синхронизация часов с сервером 10.0.0.85
    w32tm /config /manualpeerlist:10.0.0.85 /syncfromflags:manual /reliable:yes /update net time /setsntp:10.0.0.85
    Настройка списка серверов для синхронизации часов
    w32tm /config /manualpeerlist:»10.0.0.85 10.0.0.2 ntp0.zenon.net» /syncfromflags:manual /reliable:yes /update net time /setsntp:»10.0.0.85 10.0.0.2 ntp0.zenon.net»

    Началось всё с того, что я купил у китайцев часы-конструктор … ну и захотелось всегда иметь точное время для проверки. Везде советуют спецпроги или правку реестра с целью уменьшения интервала синхронизации … или планировщик … а при нечаянной переустановке винды всё придётся делать заново. Всякие гуры пишут, что по-другому нельзя, но на то они и гуры :)

    Сами мы ни разу не админы (ну может только 0,1 раза), но полазив по инету, можно найти какие-то отдельные куски из которых можно соорудить bat-файл. Сей батник можно сразу запихнуть в автозагрузку, но я для таких причиндалов, которые желательно сохранять отдельно от винды, завёл специальную папку. А в автозагрузку запихнул ярлык, в свойствах которого указал, что запускать надобно в свёрнутом виде, чтобы глаза не мозолило.

    Автозагрузка в винХР находится тут:
    C:Documents and Settingsимя вашей учетной записиГлавное менюПрограммыАвтозагрузка
    в вин7 тут:
    C:Usersимя вашей учетной записиAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup
    в других винах ищите сами :)

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

    Результат тут:

    Работает :)

    Читаем, забираем, пользуемся, комментируем, предлагаем варианты.
    8)

    Понравилась статья? Поделить с друзьями:
  • Батник для подключения сетевого диска windows 10
  • Базовый растровый формат изображений для windows поддерживаемый всеми приложениями
  • Батник для перезапуска службы windows 10
  • Базовый набор программ для windows 10 скачать торрент
  • Батник для отключения обновления windows 10