Что нового

сравнение времени в строчном формате с текущим и т.п.

bloom

Новичок
Сообщения
3
Репутация
0
Код:
#RequireAdmin
#include <Date.au3>
$tTime1 = _Date_Time_GetSystemTime()
sleep(2*1000)
$tTime2 = _Date_Time_GetSystemTime()
$strTime1 = _Date_Time_SystemTimeToDateTimeStr($tTime1)
$strTime2 = _Date_Time_SystemTimeToDateTimeStr($tTime2)
MsgBox(4096,""," "&$strTime1 &" "&$strTime2,5)
if $tTime2> $tTime1 then
   MsgBox(4096,"","пора!",5)
Else
   MsgBox(4096,"","рано!",5)
endif
Exit


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

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
bloom,
Можно так.
Код:
#include <WinAPIEx.au3>
#include <Date.au3>

HotKeySet('{Esc}', '_Exit')

$tTime1 = _Date_Time_GetSystemTime()
$strTime1 = _Date_Time_SystemTimeToDateTimeStr($tTime1, 1)
AdlibRegister('_ShowTimeDiff', 1000)
While 1
	Sleep(500)
WEnd

Func _ShowTimeDiff()
	Local $tTime2 = _Date_Time_GetSystemTime()
	Local $strTime2 = _Date_Time_SystemTimeToDateTimeStr($tTime2, 1)
	Local $sMessage = StringFormat('%-11s\t%s\n%-11s\t%s\n%-11s\t%s', 'Start Date:', $strTime1, 'Now Date:', $strTime2, _
			'Diff Time:', _WinAPI_StrFromTimeInterval(_DateDiff('s', $strTime1, $strTime2) * 1000))
	ToolTip($sMessage, 0, 0)
EndFunc   ;==>_ShowTimeDiff

Func _Exit()
	Exit
EndFunc   ;==>_Exit

То же самое, но, ИМХО, проще.
Код:
#include <WinAPIEx.au3>
#include <Date.au3>

HotKeySet('{Esc}', '_Exit')

$sTimeStart = _NowCalc()
AdlibRegister('_ShowTimeDiff', 1000)
While 1
	Sleep(500)
WEnd

Func _ShowTimeDiff()
	Local $sTimeNow = _NowCalc()
	Local $sMessage = StringFormat('%-11s\t%s\n%-11s\t%s\n%-11s\t%s', 'Start Date:', $sTimeStart, 'Now Date:', _
			$sTimeNow, 'Diff Time:', _WinAPI_StrFromTimeInterval(_DateDiff('s', $sTimeStart, $sTimeNow) * 1000))
	ToolTip($sMessage, 0, 0)
EndFunc   ;==>_ShowTimeDiff

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
B

bloom

Новичок
Сообщения
3
Репутация
0
:rofl:
ыы. слипить и диффить мне не надо тут.
мне надо к контрольной точке даты прибавить какой-то временной промежуток. потом я буду эту точку сверять с текущим моментом времени и если время наступило то запускать опред.функцию.
сделать через планировщик заданий виндоуз не предлагать!.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Код:
#include <Date.au3>
$tTime1 = _Date_Time_GetSystemTime()
sleep(2*1000)
$tTime2 = _Date_Time_GetSystemTime()
$strTime1 = _Date_Time_SystemTimeToDateTimeStr($tTime1,1)
$strTime2 = _Date_Time_SystemTimeToDateTimeStr($tTime2,1)
MsgBox(4096,""," "&$strTime1 &" - "&$strTime2,5)
if  $strTime2 > $strTime1 then
   MsgBox(4096,"","пора!",5)
Else
   MsgBox(4096,"","рано!",5)
endif
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
bloom [?]
слипить и диффить мне не надо тут.
Предупреждение За нарушение общих правил (пункт В.8):
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, ваш Модератор.
 
Автор
B

bloom

Новичок
Сообщения
3
Репутация
0
:D
спирт ты сравнил текст с текстом а не значение времядата в текстовом формате ;)
31 число будет больше чем 01 след.месяца
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
поспорим? :laugh:
bloom, ты скрипт попробовал запустить или просто просмотрел беглым взглядом?
 

focus

Осваивающий
Сообщения
69
Репутация
20
Я когда то тоже столкнулся с функциями времени.
Идея такая ( видел у madmasles ). формат времени приводим к простому числу. И потом сравниваем числа.

(месяц.чсло.часы.минуты).
Вчера 04.12.20.30
Сегодня 04.13.20.30.
Формат 04122030<04132030
Также и переходящее 31 - 01. = 04<05.
Код:
#include <Date.au3>
 $sNewDate = StringTrimRight(StringStripWS(StringTrimLeft(StringReplace(_NowCalc(), ':', ''), 8), 8), 2)
 ConsoleWrite( $sNewDate & @CRLF)


OffTopic:

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


Код:
_DateAdd


Вычисляет новую дату добавляя к исходной дате промежуток времени.
Справка.Рекомендую.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
:rofl: :rofl: :rofl: :laugh:
bloom и focus,
придумайте даты/время, на которых скрипт ошибётся
Код:
$strTime2 = "2012/04/01 18:30:30"
$strTime1 = "2012/03/31 18:30:30"
If  $strTime1 > $strTime2 Then
	MsgBox(4096,"",$strTime1 & " > " & $strTime2)
Else
	MsgBox(4096,"",$strTime1 & " <= " & $strTime2)
EndIf


Реальные даты - трехзначный год не предлагать.
;D
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
C2H5OH [?]
придумайте даты/время, на которых скрипт ошибётся
не ошибется. строчное сравнение идет по их ASCII кодам до первого неравного. для цифр коды в пределах 0x30 - 0x39, символы разделители одни и те же. поэтому как только скрипт увидит, что какой-то символ в строке больше или меньше чем в другой строке на той же позиции, то это считается результатом для всей строки.
 

focus

Осваивающий
Сообщения
69
Репутация
20
C2H5OH !
Я не говорил что Ваш код даёт сбой!
Вопрос один - решений несколько. Это нормально.
Мой - фрагмент. Мне было удобно работать просто с числами. Добавлять, отнимать, сравнивать. В скрипте. Аналогичным способом я обрабатываю IP.
Мне так удобнее.
 
Верх