Hallo zusammen,
hatte einer von euch schon mal das Problem einen solchen Timestamp in ein lesbares format bringen zu müssen?
Beispiel: 1457964343 = Realzeit: 14.03.2016 - 15:05:43
Beispiel: 1459402085 = Realzeit: 31.03.2016 - 07:28:05
Kann man schön hier umrechnen: http://www.unixtime.de/
Wie könnte man das in AHK lösen damit auch die Urzeit 100%ig stimmt?
MfG
fump
Unix Timestamp
Moderator: jNizM
Re: Unix Timestamp
Hab da was gefunden im alten Forum:
https://autohotkey.com/board/topic/2486 ... timestamp/
Echt mega kompliziert das ganze hin und her gerechne...
EDIT:
Na so kompliziert dann auch nicht...
https://autohotkey.com/board/topic/2486 ... timestamp/
Echt mega kompliziert das ganze hin und her gerechne...
EDIT:
Na so kompliziert dann auch nicht...
Code: Select all
;http://www.autohotkey.com/forum/topic2633.html
;msgbox % "%A_Now%:`r--> " . A_Now . "`r`rconverted to Unix:`r--> " . human2Unix(A_Now) . "`r`rand back to human:`r--> " . unix2Human(human2Unix(A_Now))
unix2Human(unixTimestamp) {
returnDate = 19700101000000
returnDate += unixTimestamp, s
return returnDate
}
human2Unix(humanTime) {
humanTime -= 1970, s
return humanTime
}
Last edited by fump2000 on 31 Mar 2016, 02:39, edited 1 time in total.
Re: Unix Timestamp
Code: Select all
MsgBox % unix_convert(1459402085, "dd.MM.yyyy - HH:mm:ss") ; ==> 31.03.2016 - 06:28:05
unix_convert(unix, format) {
real := 19700101000000 ; Beginn der UNIX Zeitrechnung (01.01.1970)
real += unix, s ; + Anzahl an Sekunden vom UNIX-Timestamp
real += 1, h ; + 1 Stunde für UTC+1 (MET)
FormatTime, output, % real, % format ; Formartiert mit Datum & Uhrzeit
return output
}
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
Re: Unix Timestamp
Code: Select all
#NoEnv
UTCDiff := A_Now ; braucht man nicht, wenn UTCDiff leer ist!
UTCDiff -= A_NowUTC, H
MsgBox, %UTCDiff%
ExitApp
Re: Unix Timestamp
@just me
das löst das "Sommerzeitproblem" richtig? Sprich in der Winterzeit ist das Ergbnis 1 wo jetzt eine 2 kommt. Korrekt?
das löst das "Sommerzeitproblem" richtig? Sprich in der Winterzeit ist das Ergbnis 1 wo jetzt eine 2 kommt. Korrekt?
Re: Unix Timestamp
Hallo fump,
jein, das sollte nur zeigen, dass man nicht einfach immer 1 Stunde addieren kann. Die berühmten 'Unix Time Stamps' beziehen sich immer auf die UTC (Universal Time, Coordinated). Die Differenz zwischen UTC und lokaler Zeit verändert sich im Laufe des Jahres durch die unerquickliche und überflüssige Sommerzeit. Deshalb sind die meisten der von Dir gefundenen Funktionen 'echt mega kompliziert'.
Glücklicherweise tickt die interne Uhr bei Windows Rechnern ebenfalls in UTC. Und es gibt API-Funktionen zum Umrechnen zwischen beiden Welten:
jein, das sollte nur zeigen, dass man nicht einfach immer 1 Stunde addieren kann. Die berühmten 'Unix Time Stamps' beziehen sich immer auf die UTC (Universal Time, Coordinated). Die Differenz zwischen UTC und lokaler Zeit verändert sich im Laufe des Jahres durch die unerquickliche und überflüssige Sommerzeit. Deshalb sind die meisten der von Dir gefundenen Funktionen 'echt mega kompliziert'.
Glücklicherweise tickt die interne Uhr bei Windows Rechnern ebenfalls in UTC. Und es gibt API-Funktionen zum Umrechnen zwischen beiden Welten:
Code: Select all
#NoEnv
UTC1 := unix2Human(1459402085)
LOC := UTC_ToLocalTime(UTC1)
UTC2 := UTC_FromLocalTime(LOC)
MsgBox, UTC1: %UTC1%`nLOC: %LOC%`nUTC2: %UTC2%
ExitApp
; ----------------------------------------------------------------------------------------------------------------------------------
unix2Human(unixTimestamp) {
returnDate = 19700101000000
returnDate += unixTimestamp, s
return returnDate
}
; ----------------------------------------------------------------------------------------------------------------------------------
UTC_ToLocalTime(UTC := "") {
UTC += 0, S
If UTC Is Not Time
Return ""
UTC_TS2SYSTEMTIME(UTC, UTCTime)
VarSetCapacity(LocTime, 16, 0)
DllCall("SystemTimeToTzSpecificLocalTime", "Ptr", 0, "Ptr", &UTCTime, "Ptr", &LocTime)
Return UTC_SYSTEMTIME2TS(LocTime)
}
; ----------------------------------------------------------------------------------------------------------------------------------
UTC_FromLocalTime(Local := "") {
Local += 0, S
If Local Is Not Time
Return ""
UTC_TS2SYSTEMTIME(Local, LocTime)
VarSetCapacity(UTCTime, 16, 0)
DllCall("TzSpecificLocalTimeToSystemTime", "Ptr", 0, "Ptr", &LocTime, "Ptr", &UTCTime)
Return UTC_SYSTEMTIME2TS(UTCTime)
}
; ----------------------------------------------------------------------------------------------------------------------------------
UTC_TS2SYSTEMTIME(TS, ByRef SYSTEMTIME) { ; Timestamp to SYSTEMTIME
VarSetCapacity(SYSTEMTIME, 16, 0)
NumPut(SubStr(TS, 1, 4), SYSTEMTIME, 0, "UShort")
NumPut(SubStr(TS, 5, 2), SYSTEMTIME, 2, "UShort")
NumPut(SubStr(TS, 7, 2), SYSTEMTIME, 6, "UShort")
NumPut(SubStr(TS, 9, 2), SYSTEMTIME, 8, "UShort")
NumPut(SubStr(TS, 11, 2), SYSTEMTIME, 10, "UShort")
NumPut(SubStr(TS, 13, 2), SYSTEMTIME, 12, "UShort")
}
; ----------------------------------------------------------------------------------------------------------------------------------
UTC_SYSTEMTIME2TS(ByRef SYSTEMTIME) { ; Timestamp from SYSTEMTIME
YYYY := NumGet(SYSTEMTIME, 0, "UShort")
MM := NumGet(SYSTEMTIME, 2, "UShort")
DD := NumGet(SYSTEMTIME, 6, "UShort")
HH := NumGet(SYSTEMTIME, 8, "UShort")
MN := NumGet(SYSTEMTIME, 10, "UShort")
SS := NumGet(SYSTEMTIME, 12, "UShort")
Return Format("{:04}{:02}{:02}{:02}{:02}{:02}", YYYY, MM, DD, HH, MN, SS)
}
Re: Unix Timestamp
Danke!
Angenommen, ich lasse den User per DateTime control ein Datum vorgeben welches in einen Unix Timestamp umgerechnet werden soll.
Muss ich dann die Sommerzeit wieder rausrechnen? Ich mein, der User gibt ja z.B. 31.03.2016 10:00 vor. Am Ende sollte dies ja auch wieder raus kommen...
Dann muss ich den User darauf hinweisen, dass seine Eingabe im UTC Zeitformat erfolgen muss. Das wäre wohl am einfachsten oder?
Angenommen, ich lasse den User per DateTime control ein Datum vorgeben welches in einen Unix Timestamp umgerechnet werden soll.
Muss ich dann die Sommerzeit wieder rausrechnen? Ich mein, der User gibt ja z.B. 31.03.2016 10:00 vor. Am Ende sollte dies ja auch wieder raus kommen...
Dann muss ich den User darauf hinweisen, dass seine Eingabe im UTC Zeitformat erfolgen muss. Das wäre wohl am einfachsten oder?
Re: Unix Timestamp
Könnte man die Sommer-/Winterzeit Berechnung so lösen?
edit... hmn... nich ganz
Code: Select all
MsgBox % unix_convert(1459402085, "dd.MM.yyyy - HH:mm:ss") ; ==> 31.03.2016 - 05:28:05 (da Sommerzeit | 06:28:05 bei Winterzeit)
unix_convert(unix, format) {
static MET := ((A_NowUTC - A_Now) // 10000) * 3600 ; Berechne MET (Sommer- / Winterzeit)
real := 19700101000000 ; Beginn der UNIX Zeitrechnung (01.01.1970)
real += unix, s ; + Anzahl an Sekunden vom UNIX-Timestamp
real += MET, h ; Kalkuliere Sommer- / Winterzeit mit ein
FormatTime, output, % real, % format ; Formartiert mit Datum & Uhrzeit
return output
}
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
Re: Unix Timestamp
Auf http://www.unixtime.de/ ergibt 1459402085 = 31.03.2016 - 07:28:05
Der TimeStamp stammt aus einem LoginSystem unserer DSL Anschlüsse und beschreibt den letzten Login des Routers.
Der Kunde hat in diesem Fall, den Router ungefähr um diese Zeit neu gestartet. Der TimeStamp passt also.
Der TimeStamp stammt aus einem LoginSystem unserer DSL Anschlüsse und beschreibt den letzten Login des Routers.
Der Kunde hat in diesem Fall, den Router ungefähr um diese Zeit neu gestartet. Der TimeStamp passt also.
Re: Unix Timestamp
@jNizM: (A_NowUTC - A_Now) gibt ja nur die Differenz für den heutigen Tag (31.03.2016 = Sommerzeit) zurück. Wenn der Zeitstempel aber dann aber z.B. auf den 14.03.2016 zeigt, hilft das nicht weiter.
Re: Unix Timestamp
Ach, spätestens 2038 ist es mit der Unixzeit sowieso vorbei (32-Bit)
wiki/Unixzeit#Jahr-2038-Problem
wiki/Unixzeit#Jahr-2038-Problem
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
Re: Unix Timestamp
@fump2000: Wenn ihr wisst, dass es sich um Unix-Zeit handelt, ist es eigentlich auch nicht so schwer, die passende Differenz anhand des Datums im Kopf zu addieren. Das überlebt dann auch das Jahr 2038.
Re: Unix Timestamp
Vielleicht sind wir ja 2038 schon bei 128-Bit oder 256-Bit angekommen
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
Who is online
Users browsing this forum: No registered users and 7 guests