Что нового

[Время, дата] текущее время в имени файла

dexter987

Новичок
Сообщения
5
Репутация
0
что хочу: обновить страницу, скрин участка и сохранение его в файл с временем в названии
на чем запнулся: формат времени _NowTime() выглядит так 10:10:10 но винда запрещает ":" (двоеточие) в имени файла
как решил: записываю время в текстовый файл, читаю и заменяю ":" на "_" и уже это пишу в имя файла
в принципе меня устраивает но чую есть более элегантное решение... подскажите

Код:
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.14.2
 Author:         myName

 Script Function:
	Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#include <ScreenCapture.au3>
#include <Date.au3>
Dim $chars[9]
$s = 0
Sleep(2 * 1000)
While 1
   $s = $s + 1
   MouseClick ("left", 555 , 75 )
   Sleep(10 * 1000)
   $d = _NowDate()
   DirCreate("C:\monitor\log\ "&_NowDate())


	$file = FileOpen("1.txt", 2)
	FileWriteLine($file,_NowTime() )
	FileClose($file)

$file = FileOpen("1.txt", 0)
For $s = 1 To 8
    $chars[$s] = FileRead($file, 1)
    If @error = -1 Then ExitLoop
    If $chars[$s] = ':' Then
	   $chars[$s] = '_'
	   EndIf
Next
FileClose($file)

$file = FileOpen("1.txt", 1)
FileWriteLine($file,$chars[1]&" "&$chars[2]&" "&$chars[3]&" "&$chars[4]&" "&$chars[5]&" "&$chars[6]&" "&$chars[7]&" "&$chars[8])
FileClose($file)

_ScreenCapture_Capture("C:\monitor\log\ "&_NowDate()&"" & "\"&$chars[1]&""&$chars[2]&""&$chars[3]&""&$chars[4]&""&$chars[5]&""&$chars[6]&""&$chars[7]&".jpg", 646, 160, 880, 186)
MouseMove ( 880 , 186 )
Sleep(590 * 1000)

Wend
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
#include <Date.au3>
Local $time = StringReplace(_NowTime(),':','_')
ConsoleWrite($time & @CRLF)
 
Автор
D

dexter987

Новичок
Сообщения
5
Репутация
0
Ура !!! Заработало !!! пара строчек и все !!!
Спасибо ОГРОМНОЕ !!!!
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
OffTopic:
dexter987 сказал(а):
что хочу: обновить страницу, скрин участка и сохранение его в файл с временем в названии
на чем запнулся: формат времени _NowTime() выглядит так 10:10:10 но винда запрещает ":" (двоеточие) в имени файла
как решил: записываю время в текстовый файл, читаю и заменяю ":" на "_" и уже это пишу в имя файла
в принципе меня устраивает но чую есть более элегантное решение... подскажите
Это ещё додуматься до такого надо :smile: :smile: :shok:
 
Автор
D

dexter987

Новичок
Сообщения
5
Репутация
0
да я ужас скока думал на эту тему, ночью идея пришла.... Но чувствовал что есть простое решение, спросил на форуме помогли.
И еще раз ОГРОМНОЕ СПАСИБО!!!
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
dexter987 [?]
простое решение
При помощи макросов даты-времени можно создать любой формат
Код:
ConsoleWrite(@YEAR & "-" & @MON & "-" & @MDAY & " " & @HOUR & "_" & @MIN & "_" & @SEC & @CRLF)
 
Автор
D

dexter987

Новичок
Сообщения
5
Репутация
0
АААААААА Два способа .... блин я теперь не знаю какой использовать........ :stars:
 

Oki

Продвинутый
Сообщения
452
Репутация
62
При помощи макросов даты-времени можно создать любой формат
Код:
ConsoleWrite(@YEAR & "-" & @MON & "-" & @MDAY & " " & @HOUR & "_" & @MIN & "_" & @SEC & @CRLF)
А существует ли хоть малейшая вероятность при таком способе получить серьёзный сбой на почве асинхронности? Если макрокоманды выполняются последовательно, чего следует ожидать, если это как-то особо не предусмотрено, то возможна, пусть и в редких случаях, ситуация, подобная следующей.

Предположим, что время понадобилось в районе полуночи в ночь на 1 февраля, так что макрокоманда @MON успела выполниться в конце последней секунды суток, а макрокоманда @MDAY не успела, выпадая не начало первой секунды следующих. В итоге получим не один из вариантов 31 января или 1 февраля, а 31 февраля. И такой нонсенс хотя бы проще отслеживать, чем-какое-нибудь 31 января в новогоднюю ночь, причём уходящего года, то есть с отклонением в 11 месяцев. Подобные сбои теоретически вероятны на границе не только суток, но и часов, минут или секунд (последнее - в случае использования макрокоманды @MSEC при дальнейшей сортировке частых моментов времени).

В некоторых ситуациях такое расхождение может иметь неприятные последствия. Тогда лучше сначала заполучить метку времени, а затем её обработать.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
$t = TimerInit()
$d = @YEAR & "-" & @MON & "-" & @MDAY & " " & @HOUR & "_" & @MIN & "_" & @SEC
ConsoleWrite(TimerDiff($t) & @CRLF)

У меня в консоль выводит от 0.5 до 0.6. За пол миллисекунды не изменится даже макрос @MSEC

Код:
For $i = 0 To 9
  ConsoleWrite(@YEAR & "-" & @MON & "-" & @MDAY & " " & @HOUR & "_" & @MIN & "_" & @SEC & "_" & @MSEC & @CRLF)
Next

Код:
2022-12-05 13_16_09_822
2022-12-05 13_16_09_822
2022-12-05 13_16_09_822
2022-12-05 13_16_09_822
2022-12-05 13_16_09_822
2022-12-05 13_16_09_822
2022-12-05 13_16_09_822
2022-12-05 13_16_09_822
2022-12-05 13_16_09_822
2022-12-05 13_16_09_822
 

Oki

Продвинутый
Сообщения
452
Репутация
62

InnI

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

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

Это факт, что не всегда требуется надёжность, но риски следует оценивать зряче.
 

Alecsis

Осваивающий
Сообщения
98
Репутация
41
А что мешает воспользоваться вот этим?
Код:
_Date_Time_GetLocalTime()
Штатная, что называется «из коробки», обёртка вызова WinAPI… и никаких макросов не надо :good:
Остальное уже чисто механические телодвижения
 
Верх