Что нового

[Время, дата] Как получить разницу времени ПК и сервера

TiranCool

Новичок
Сообщения
78
Репутация
0
в cmd это выглядит так :
w32tm /stripchart /computer:ntp2.stratum1.ru /samples:5 /dataonly
@pause
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Можно выполнить Вашу команду в командной строке и получить из неё результат , например так :
Код:
#include <WinAPIEx.au3>
#include <Array.au3>

$sBuffer = ''
$sRead = ''
$comand = 'w32tm /stripchart /computer:ntp2.stratum1.ru /samples:5 /dataonly'
$iPID = Run(@ComSpec & ' /C ' & $comand, @SystemDir, @SW_HIDE, $STDOUT_CHILD)

While 1
	$sBuffer = StdoutRead($iPID)
	If @error Then ExitLoop
	If $sBuffer Then
		$sRead &= $sBuffer
	EndIf
	Sleep(2)
WEnd

$sRead = _WinAPI_OemToChar($sRead)
$sRead = StringStripCR($sRead)
$sRead = StringRegExpReplace($sRead, '((^[\n]*)|([\n]*$))', '')
$sRead = StringRegExpReplace($sRead, '[\n]{2,}', @LF)
$aRead = StringSplit($sRead, @LF)
$Lines_r = _ArrayToString($aRead, @CRLF, 1)
MsgBox(0, '', $Lines_r)
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Или так:
Код:
Local $sOutput = ''
$iPID = Run(@comspec & ' /C w32tm /stripchart /computer:ntp2.stratum1.ru /samples:5 /dataonly', '' , @SW_HIDE, 9)
Local $sOutput, $last
Do
    $sOutput &= StdoutRead($iPID)
    If @error Then ; Выход из цикла, если процесс завершён или StdoutRead возвращает ошибку.
        ExitLoop
    EndIf
Until StringRight($sOutput, 1) = ">" Or StringRight($sOutput, 2) = "? "
ConsoleWrite($sOutput & @CRLF)

Ниже выводит преобразованные даты и разницу в секундах:
Код:
#include <Date.au3>

Local $sOutput = '', $sDate = _NowCalcDate()
$iPID = Run(@comspec & ' /C w32tm /stripchart /computer:ntp2.stratum1.ru /samples:1 /dataonly', '' , @SW_HIDE, 9)
Local $sOutput, $last
Do
    $sOutput &= StdoutRead($iPID)
    If @error Then ; Выход из цикла, если процесс завершён или StdoutRead возвращает ошибку.
        ExitLoop
    EndIf
Until StringRight($sOutput, 1) = ">" Or StringRight($sOutput, 2) = "? "
;~ ConsoleWrite($sOutput & @CRLF)

$arr = StringRegExpReplace($sOutput, '(\d\d?).(\d\d?).(\d\d\d\d)( \d\d?:\d\d:\d\d)', '$3/$2/$1$4')
$arr = StringRegExpReplace($arr, '(?m)^(\d\d?:\d\d:\d\d)', _NowCalcDate() & ' $1')
;~ ConsoleWrite($arr & @CRLF)

$arr = StringRegExp($arr, '\d\d\d\d/\d\d?/\d\d? \d\d?:\d\d:\d\d', 3)

ConsoleWrite( $arr[0] & @CRLF)
ConsoleWrite( $arr[1] & @CRLF)
ConsoleWrite(_DateDiff('s', $arr[0], $arr[1]) & @CRLF)
 
A

Alofa

Гость
Ну или так:
http://autoit-script.ru/index.php?topic=20487.0
:smile:
 

tamirlan1

Новичок
Сообщения
8
Репутация
0
А как получить среднее значение из 5 значений? на выходе поучить например число -0.8480204
 

tamirlan1

Новичок
Сообщения
8
Репутация
0
как вычисляется среднюю я знаю :smile: для меня проблема получить число без всяких посторонних s айпи имен серверов времени
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Вот мой пример , немного переделаный
Код:
#include <WinAPIEx.au3>
#include <Array.au3>

$sBuffer = ''
$sRead = ''
$comand = 'w32tm /stripchart /computer:ntp2.stratum1.ru /samples:5 /dataonly'
$iPID = Run(@ComSpec & ' /C ' & $comand, @SystemDir, @SW_HIDE, $STDOUT_CHILD)

While 1
    $sBuffer = StdoutRead($iPID)
    If @error Then ExitLoop
    If $sBuffer Then
        $sRead &= $sBuffer
    EndIf
    Sleep(2)
WEnd

$sRead = _WinAPI_OemToChar($sRead)
$sRead = StringStripCR($sRead)
$sRead = StringRegExpReplace($sRead, '((^[\n]*)|([\n]*$))', '')
$sRead = StringRegExpReplace($sRead, '[\n]{2,}', @LF)
$aRead = StringSplit($sRead, @LF)
$Lines_r = _ArrayToString($aRead, @CRLF, 1)
$asResult = StringRegExp($Lines_r,  '(?i),(.*?)s', 3)

$n=0
For $i=0 to Ubound($asResult)-1
	$n+=$asResult[$i]
Next

$Value=$n/$i
ConsoleWrite($Value&@CR)
У меня все значения положительные , попробуйте будет ли правильно отрицательные считать
 

tamirlan1

Новичок
Сообщения
8
Репутация
0
то что нужно, но не отображает знак минус
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Изменил у себя время в большую сторону для отрицательных значений - всё нормально, знак минус пишет...
 

tamirlan1

Новичок
Сообщения
8
Репутация
0
все норм. в заблуждение ввел тайм100. что у нас плюс у него минус и наоборот) спасибо! лови плюс в репу =)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
tamirlan1 [?]
А как получить среднее значение из 5 значений?

Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Глобальный модератор.
 
Верх