Hallo,
gibt es eine UDF oder sonstiges was mir die Zeit umrechnet um zu gucken wie lange noch was dauert.
Ich will in eine INI eine Uhrzeit schreiben (12:34) und wenn es so spät ist, dann soll eine MSG Box auftauchen. Aber es soll mir auch anzeigen wie lange es bis dahin dauert. Es kann auch Sein das es um 04:12 was sein soll und ich mein Script um 12:34 angemacht habe.
Zeit umrechner
-
- [ offen ]
-
Freaky -
11. April 2010 um 15:56 -
Geschlossen -
Erledigt
-
-
Ich glaube das hatten wir hier schon öfter...
Schau dir die Funktionen der Date.au3 in der Hilfe an. Die kann fast alles was mit Daten und Zeit zu tun hat. -
Ich hab da mal was vorbereitet:
Spoiler anzeigen
[autoit]Func GetTimeDiff($Zeit1,$Zeit2)
[/autoit] [autoit][/autoit] [autoit]
Dim $Diff[3]
Local $a, $b
$a = StringReplace($Zeit1,":","")
$b = StringReplace($Zeit2,":","")
Select
Case $a = $b
For $i=0 To 2
$Diff[$i] = 0
Next
Case $a > $b
$Diff[0] = 1
$Diff[1] = StringLeft($a,2) - StringLeft($b,2)
$Diff[2] = StringRight($a,2) - StringRight($b,2)
If StringRight($a,2) < StringRight($b,2) Then;Diese Zeile hab ich irgendwie unterschlagen - strg x statt strg c
$Diff[1] -= 1
$Diff[2] += 60
EndIfCase $a < $b
[/autoit] [autoit][/autoit] [autoit]
$Diff[0] = -1
$Diff[1] = StringLeft($b,2) - StringLeft($a,2)
$Diff[2] = StringRight($b,2) - StringRight($a,2)
If StringRight($b,2) < StringRight($a,2) Then
$Diff[1] -= 1
$Diff[2] += 60
EndIfEndSelect
[/autoit] [autoit][/autoit] [autoit]
Return $Diff
EndFunc$a=GetTimeDiff("20:10","12:25")
[/autoit]
Switch $a[0]
Case 0
MsgBox(0,"Uhrzeitdiff","Beide Zeiten sind gleich!")
Case 1
MsgBox(0,"Uhrzeitdiff","Zeit 1 ist später, undzwar genau: "&$a[1]&" Stunde(n) und "&$a[2]&" Minute(n)!")
Case -1
MsgBox(0,"Uhrzeitdiff","Zeit 1 ist früher, undzwar genau: "&$a[1]&" Stunde(n) und "&$a[2]&" Minute(n)!")
EndSwitch
Es wird ein Array zurückgegeben mit folgender Struktur:
Array[0] = 1 (Zeit 1 ist später), -1 (Zeit 1 ist früher) , 0 (Zeit 1 und Zeit 2 sind gleich)
Array[1] = Differenz in Stunden
Array[2] = Differenz in MinutenViel Spaß damit
PS: Falls du mehr Angaben überprüfen musst (z.B. Datum), dann würde ich auf die _DateDiff() Funktion hinweisen (siehe Hilfedatei -> F1 in Scite)EDIT: Danke für den Hinweis.. ist mir bei Copy&Paste passiert.. statt strg+c strg+x gedrückt
-
Danke aber bei mir Zeigt es Minus Zahlen an da kann doch was nicht stimmen.
Edit: Könnte man da den Tag mit einbauen ?
Weil das Script denkt ja wenn es 20:10 ist und was um 20:05 eintreffen soll, das es schon eingetroffen ist oder erst eintreffen wird -
Soooo... ich hab da mal ein paar Sachen vorbereitet:
Spoiler anzeigen
[autoit]#include <array.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <date.au3>$Datum1 = _NowCalc()
[/autoit] [autoit][/autoit] [autoit]
$Datum2 = _NowCalc()
$Datum2 = _DateAdd("s",100,$Datum2)
$Temp = $Datum2
$Tage = _DateDiff("D",$Datum1,$Temp)
$Temp = _DateAdd("D",$Tage*(-1),$Temp)
$Stunden = _DateDiff("h",$Datum1,$Temp)
$Temp = _DateAdd("h",$Stunden*(-1),$Temp)
$Minuten = _DateDiff("n",$Datum1,$Temp)
$Temp = _DateAdd("n",$Minuten*(-1),$Temp)
$Sekunden = _DateDiff("s",$Datum1,$Temp)
$Temp = _DateAdd("s",$Sekunden*(-1),$Temp)
MsgBox(0,"Datumvergleich","Datum1: "&$Datum1&@CRLF&"Datum2: "&$Datum2&@CRLF&"Tage: "&$Tage&@CRLF&"Stunden: "&$Stunden&@CRLF&"Minuten: "&$Minuten&@CRLF&"Sekunden: "&$Sekunden);Datumsformat: JJJJ/MM/DD HH/MM/SS
[/autoit] [autoit][/autoit] [autoit]Func ConvertDdate($Datum); Funktion zum umwandeln in das amerikanische Datum:
[/autoit] [autoit][/autoit] [autoit]
$Reg = StringRegExp($Datum,"(\d{2})\.(\d{2})\.(\d{4})\s(\d{2}):(\d{2}):(\d{2})",3)
Return $Reg[2]&"/"&$Reg[1]&"/"&$Reg[0]&" "&$Reg[3]&":"&$Reg[4]&":"&$Reg[5]
EndFuncFunc ConvertAdate($Datum); Funktion zum umwandeln in das deutsche Datum:
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$Reg = StringRegExp($Datum,"(\d{4})/(\d{2})/(\d{2})\s(\d{2}):(\d{2}):(\d{2})",3)
Return $Reg[2]&"."&$Reg[1]&"."&$Reg[0]&" "&$Reg[3]&":"&$Reg[4]&":"&$Reg[5]
EndFunc; Beispiel:
[/autoit]
$Amerikanisch = _NowCalc()
MsgBox(0,"Beispiel: Datumswandel1","Amerikanisches Datum: "&$Amerikanisch)
$Deutsch = ConvertAdate($Amerikanisch)
MsgBox(0,"Beispiel: Datumswandel2","Deutsches Datum: "&$Deutsch)
$WiederAmerikanisch = ConvertDdate($Deutsch)
MsgBox(0,"Beispiel: Datumswandel3","Wieder das Amerikanische Datum: "&$WiederAmerikanisch)
Guck dir die Beispiele genau an.. und vergiss nicht VOR dem benutzen von _Datediff das AMERIKANISCHE Datum zu benutzen (Umwandlungsfunktionen + Beispiele liegen bei) -
Danke, aber das hilft mir jetzt nicht wirklich weiter
-
Zitat
Danke, aber das hilft mir jetzt nicht wirklich weiter
Dann kann man dir nicht helfen.
Wenn du keine Lust hast das zu lernen und trotzdem das Script haben möchtest, dann poste den Auftrag mit Belohnung in der Jobbörse. -
Ne schon klar
Aber das letze Script zeigt nur wie ich von der Deutsche Uhrzeit in die Amerikanische Uhrzeit umrechne.
Und das brauche ich ja nicht bzw. es hilft mir nicht weiter. -
Schau dir das Beispiel von XovoxKingdom nochmal genau an.
-
Am besten lässt sich das denke ich mal über eine SQLite Datenbank lösen. Ich arbeite momentan auch mit einer und das erleichert die arbeit wirklich.
Hier mal ein Beispiel um abgelaufene Daten über SQL zu finden:
Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <Date.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>
_DB_Start() ; :memory: Datenbank (Weil Beispiel); Tabelle erstellen
[/autoit] [autoit][/autoit] [autoit]
_DB_Exec("CREATE TABLE Events (id INTEGER PRIMARY KEY,date TEXT,description TEXT);"); Einträge machen
[/autoit] [autoit][/autoit] [autoit]
_DB_Exec("INSERT INTO Events (id, date, description) VALUES (NULL,'1996/06/15 13:34','Irgend ein Datum')")
_DB_Exec("INSERT INTO Events (id, date, description) VALUES (NULL,'2005/11/17 22:09','Noch so ein Datum')")
_DB_Exec("INSERT INTO Events (id, date, description) VALUES (NULL,'2015/06/15 06:21','Das letzte Datum')"); Abgelaufene Events auflisten
[/autoit] [autoit][/autoit] [autoit]
$iNow = _NowCalc()
$aTmp = _DB_Query("SELECT * FROM Events WHERE date<'"&$iNow&"'")
_ArrayDisplay($aTmp); Events löschen
[/autoit] [autoit][/autoit] [autoit]
_DB_Exec("DELETE FROM Events WHERE date<'"&$iNow&"'");Restliche Tabelle anzeigen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$aTmp = _DB_Query("SELECT * FROM Events")
_ArrayDisplay($aTmp)#region - SQL Funktionen
[/autoit] [autoit][/autoit] [autoit]
Func _DB_Start($sPath = ":memory:")
Local $fFE
_SQLite_Startup()
If @error > 0 Then
MsgBox(16, "SQLite Error", "SQLite.dll Can't be Loaded!")
Exit -1
EndIf
ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CR)
Return _SQLite_Open($sPath)
EndFunc ;==>_DB_StartFunc _DB_Shutdown()
[/autoit] [autoit][/autoit] [autoit]
_SQLite_Shutdown()
EndFunc ;==>_DB_ShutdownFunc _DB_Exec($sMyQuery, $hDB = -1, $iSLN = @ScriptLineNumber)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite("+> SQLite Exec, Line " & $iSLN & @TAB & $sMyQuery & @CRLF)
Local $iRet = _SQLite_Exec($hDB, $sMyQuery)
Return SetError(@error, @extended, $iRet)
EndFunc ;==>_DB_ExecFunc _DB_Query($sMyQuery, $hDB = -1, $iSLN = @ScriptLineNumber)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite("-> SQLite Query, Line " & $iSLN & @TAB & $sMyQuery & @CRLF)
Local $hQuery, $aCol = 0, $iRow = 0, $hSize = 1000, $vSize = 0
Dim $aRet[1000][50]
_SQLite_Query($hDB, $sMyQuery, $hQuery)While _SQLite_FetchData($hQuery, $aCol) = $SQLITE_OK
[/autoit] [autoit][/autoit] [autoit]
$iRow += 1
If $iRow = $hSize - 1 Then
$hSize += 2000
ReDim $aRet[$hSize][UBound($aRet, 2)]
EndIf
For $i = 0 To UBound($aCol) - 1
If $vSize < $i Then $vSize = $i
$aRet[$iRow][$i] = $aCol[$i]
Next
WEnd$aRet[0][0] = $iRow
[/autoit]
$aRet[0][1] = $vSize + 1
ReDim $aRet[$aRet[0][0] + 1][$aRet[0][1]]
Return $aRet
EndFunc ;==>_DB_Query
#endregion -
Ich brauche aber keine SQLite Datenbank
Ich benutze lieber File