Что нового

[Время, дата] Преобразование времени в строку и обратно

Erection

Новичок
Сообщения
16
Репутация
0
Собственно, господа, необходимо мне сделать что-то вроде будильничка, - то есть когда наступает определенное время, что-то происходит.

Получать текущее время я уже научился, как его перегнать в строку, а так же, как задать время строкой и преобразовать ее в формат времени?

Пример:

Строка1="090000"
Время=ПолучитьТекущееВремя();
Строка2=Строка(Время);

Если Строка1=Строка2 Тогда
КонецЕсли;


другой вариант:
Время1=Время("090000");
Время2=ПолучитьТекущееВремя();
Если Время1=Время2 Тогда
КонецЕсли;

Если на это есть help или уже есть похожая тема, в которой моя проблема решена, я к сожалению не нашел ее, перед тем как закрыть тему добавьте ссылку на решение проблемы.
 

Futurebear

Знающий
Сообщения
29
Репутация
6
Помоему преобразование тут не нужно.
Вам просто необходимо сравнить 2 даты?
Читайте справку про функции связанные с датой
Код:
_DateDiff


Что вы понимаете под числом Строка1="090000"?
Можно сравнить еще как числа 29.12.2012 11:20:59 ---> int(20121229112059)==всторая склееная строка из дат
есть еще функция
Код:
_Timer_Diff
 
Автор
E

Erection

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

erlik

Продвинутый
Сообщения
317
Репутация
84
Советую глянуть UDF Date.au3 - там есть куча полезных функций для работы со временем и датой.
Вот нарыл у себя кой-какой пример:
Код:
#include "Date.au3"
; заменить формат DD.MM.YYYY HH:MM:SS возвращаемый _Now() на YYYY/MM/DD[ HH:MM:SS]
Local $ConvertDate=StringRegExpReplace(_Now(),"(\d{2}).(\d{2}).(\d{4})","$3/$2/$1")
ConsoleWrite("Дата в новом формате: " & $ConvertDate&@CRLF)
;получить разницу между текущей датой и временем и будущей датой
ConsoleWrite("Разница в меcяцах: "&_DateDiff("M", $ConvertDate, "2013/12/29 13:54:38")&@CRLF)
ConsoleWrite("Разница в днях: "&_DateDiff("D", $ConvertDate, "2013/12/29 13:54:38")&@CRLF)
ConsoleWrite("Разница в часах: "&_DateDiff("h", $ConvertDate, "2013/12/29 13:54:38")&@CRLF)
ConsoleWrite("Разница в минутах: "&_DateDiff("n", $ConvertDate, "2013/12/29 13:54:38")&@CRLF)
ConsoleWrite("Разница в секундах: "&_DateDiff("s", $ConvertDate, "2013/12/29 13:54:38")&@CRLF)

А вот простенький пример будильника с автоматическим перевзводом:
Код:
; установим время срабатывания будильника - можно строкой с конкретной датой и временем
;Local $sTime="2012/12/29 15:54:38"
; а можно через _DateAdd() калькуляцией текущего времени +нужный промежуток в годах, месяцах, днях, минутах, или секундах. Как именно - смотреть функцию в Date.au3.
; в примере будильник срабатывает каждые 10 секунд - установить можно любой другой промежуток
Local $sTime=_DateAdd("s",10,StringRegExpReplace(_Now(),"(\d{2}).(\d{2}).(\d{4})","$3/$2/$1"))
Local $sCurrentTime
While 1
	$sCurrentTime=StringRegExpReplace(_Now(),"(\d{2}).(\d{2}).(\d{4})","$3/$2/$1")
	If $sCurrentTime>=$sTime Then
	MsgBox(0,"", "Пора вставать!")
	; взведем будильник заново
	$sTime=_DateAdd("s",10,$sCurrentTime)
	EndIf
	Sleep(500)
Wend
 
Автор
E

Erection

Новичок
Сообщения
16
Репутация
0
Делаю вот такую штуку:
Код:
$InputDateStart = GUICtrlCreateInput("", 95, 205, 120, 20)


Ввожу в поле ввода такую строку: 2012/31/12 05:04:40
Код:
MsgBox(64,"",_NowCalc())
MsgBox(64,"",GUICtrlRead($InputDateStart))
MsgBox(64,"",_DateDiff('s',_NowCalc(),GUICtrlRead($InputDateStart)))


1) дает ок результат
2) дает ок результат
3) дает 0 результат... что я не так делаю? Я хочу разницу в секундах получить, вроде все правильно передаю.

Код:
@error
0 возвращает


жаль что нет возможности поставить "бесполезное сообщение" модератору, за то что дал предупреждение и не помог с вопросом...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


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

erlik

Продвинутый
Сообщения
317
Репутация
84
Erection
Код:
$ConvertDate=StringRegExpReplace(_Now(),"(\d{2}).(\d{2}).(\d{4})","$3/$2/$1")

PS: Для _DateDiff нужно переформатировать строку от _Now().
----------------------------------------
Не заметил что у тебя не Now(), а а NowCalc(). Сейчас проверим как с ней.
---------------------------------------------------------------
Вот твоя ошибка: 2012/31/12 05:04:40> 2012/12/31 05:04:40. Ошибся с порядком значений.
 
Автор
E

Erection

Новичок
Сообщения
16
Репутация
0
Редактирование ничего не дало - результат пока тот же.


Добавлено:
Сообщение автоматически объединено:

Собственно новая проблема, старая не ушла, но решая ее я наткнулся еще на один косяк. Я наверное что-то круто не понимаю или упускаю из виду какую-то важную деталь...

Ничего вроде сложного - вон пару постов выше мне такое решение в виде будильника предлагали, я делаю тоже самое:

Код:
$Date1=_DateAdd("s",0,_NowCalc())
$Date2=_DateAdd("s",0,GUICtrlRead($InputDateStart))
If $Date1>$Date2 Then
    MsgBox(64,"",$Date1)
ElseIf $Date1<$Date2 Then
    MsgBox(64,"",$Date2)
Else
    MsgBox(64,"","Равны")
EndIf


А в результате какую бы я дату не вводил в поле ввода, больше всегда оказывается дата
Код:
_NowCalc()



Добавлено:
Сообщение автоматически объединено:

А вот еще кусок:
Код:
$Date1=_DateAdd("s",0,"2012/31/12 05:04:40")
$Date2=_DateAdd("s",0,"2013/31/12 08:04:40")
If $Date1>$Date2 Then
    MsgBox(64,"",$Date1)
ElseIf $Date1<$Date2 Then
    MsgBox(64,"",$Date2)
Else
    MsgBox(64,"","Равны")
EndIf


Все время получаю сообщение что равны.

С этим разобрался - если добавлять 0 секунд к дате, получаешь результат 0 - просто думал, может таким образом к дате конвертится.
 

erlik

Продвинутый
Сообщения
317
Репутация
84
Erection
Ну я ж тебе написал, что ты дату НЕПРАВИЛЬНО вводишь!!! Поменяй местами месяц и день.
Правильный формат YYYY/MM/DD. Неправильный YYYY/DD/MM.
 
Автор
E

Erection

Новичок
Сообщения
16
Репутация
0
Черт))) я дурак значит. Просто не увидел то что ты сообщение добавил.


Добавлено:
Сообщение автоматически объединено:

Со всем разобрался всем спасибо. Тему отмечаю.
 

kristow13

Новичок
Сообщения
76
Репутация
0
Подскажите, я получаю из базы вот такую строку: 20140212152005
Как ее можно перевести к нормальному виду? 12.02.2014 15:20:05 ??? :-[
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
kristow13

Код:
$sDate = StringRegExpReplace( "20140212152005", "([\d]{4})([\d]{2})([\d]{2})([\d]{2})([\d]{2})([\d]{2})", "\3.\2.\1 \4:\5:\6" )

MsgBox( 64, '', $sDate )

Вот вам пример выдранный из справки, прочитали бы ее сначала.
 

kristow13

Новичок
Сообщения
76
Репутация
0
firex Спасибо! :laugh:
Дата отображается как надо! Ура.
 
Верх