Zeitstempel Topic is solved
Moderator: jNizM
Zeitstempel
Hallo zusammen
Ich stehe mal wieder total auf der Leitung ... also meine Frage an die Wissenden:
Ich hole mir per FileGetTime,TIME,%PATH_DATEI%,M den Zeitstempel einer Datei und bekomme z.B den Wert 20230323082153.
Per FormatTIME,TIME,%TIME%,dd.MM. yyyy hh:mm:ss erhalte ich ein gut lesbares Datumsformat meiner Wahl , hier 23.03. 2023 08:21:53 in einem Edit-Control.
Soweit alles klar hier.
Wenn ich nun den Zeitstempel im Edit-Control ändere und per FileSetTime an die Datei schicken will muss ich ja das neue Datum vorher umformatieren ...
Muss ich das mit Replace alle Punkte und StringsSplit etc. quasi "händisch" vorher umbauen / neu zusammensetzen oder gibts da einen internen Format-Befehl der das kann ?
Danke schon mal vorab fürs lesen
gruss
gero
Ich stehe mal wieder total auf der Leitung ... also meine Frage an die Wissenden:
Ich hole mir per FileGetTime,TIME,%PATH_DATEI%,M den Zeitstempel einer Datei und bekomme z.B den Wert 20230323082153.
Per FormatTIME,TIME,%TIME%,dd.MM. yyyy hh:mm:ss erhalte ich ein gut lesbares Datumsformat meiner Wahl , hier 23.03. 2023 08:21:53 in einem Edit-Control.
Soweit alles klar hier.
Wenn ich nun den Zeitstempel im Edit-Control ändere und per FileSetTime an die Datei schicken will muss ich ja das neue Datum vorher umformatieren ...
Muss ich das mit Replace alle Punkte und StringsSplit etc. quasi "händisch" vorher umbauen / neu zusammensetzen oder gibts da einen internen Format-Befehl der das kann ?
Danke schon mal vorab fürs lesen
gruss
gero
Re: Zeitstempel Topic is solved
Moin,
für mich haben 'lesbare' Zeitstempel das Format 2023-03-23 08:21:53. Daraus kannst Du mit einem RegEx einen Dateizeitstempel zurück gewinnen:
Ansonsten musst Du das per Hand umbasteln oder eine passende Benutzerfunktion finden. Eingebaut gibt es das nicht.
für mich haben 'lesbare' Zeitstempel das Format 2023-03-23 08:21:53. Daraus kannst Du mit einem RegEx einen Dateizeitstempel zurück gewinnen:
Code: Select all
EditZeitstempel := "2023-03-23 08:21:53"
DateiZeitstempel := RegExReplace(EditZeitstempel, "\D") ; alles entfernen, das keine Ziffer ist
Re: Zeitstempel
Danke just me ... das wollte ich wissen, dass es da nichts Internes gibt, was da quasi zurückformatiert.
Bastel ich mir halt was selber.
Nochmals danke für die schnelle Antwort & Aufklärung
gruss
gero
Bastel ich mir halt was selber.
Nochmals danke für die schnelle Antwort & Aufklärung
gruss
gero
Re: Zeitstempel
Hallo,
vielleicht?:
vielleicht?:
Code: Select all
EditZeitstempel := "2023-03-23 08:21:53"
Format := "yyyy-MM-dd HH:mm:ss"
DateiZeitstempel := TimeStamp(EditZeitstempel, Format)
MsgBox,% DateiZeitstempel ; 20230323082153
; EnvAdd and EnvSub require YYYYMMDDHH24MISS ("yyyyMMddHHmmss").
; I found it inconvenient and wrote this function TimeStamp(Date, Format).
; It calculates the necessary stamp from given Date and Format and completes missing values with today's noon.
; It works with numeric formats, complete (with leading zeros) or separated e.g. with dots.
; It is not as powerful as InvFormattime from philz, but easier to use.
MsgBox,% TimeStamp("01022021","ddMMyyyy")
; 20210201120000 (complete formats with leading zeros)
MsgBox,% TimeStamp("1.2.21","d.M.yy")
; 20210201120000 (dot separated formats)
Minutes := TimeStamp("12:17","H:mm")
Minutes -= TimeStamp("3:06"), Minutes ;EnvSub
MsgBox,% Minutes ;551 (minutes between 3:06 and 12:17)
Date := TimeStamp("11.9.01","d.M.yy")
Date += 1234, days ;EnvAdd
FormatTime, Date,% Date, d.M.yy
MsgBox,% Date ;27.1.05 (= 11.9.01 + 1234 days)
Format = HH:mm:ss
Seconds := TimeStamp("02:06:19",Format)
Seconds -= TimeStamp("00:23:17"), Seconds ;EnvSub
Difference := TimeStamp("00:00:00")
Difference += Seconds, Seconds ;EnvAdd
FormatTime, Difference,% Difference,% Format
MsgBox,% Difference ; 01:43:02 = 02:06:19 - 00:23:17
Return
TimeStamp(Date, Format:="")
{
Static Noon := A_Year A_MM A_DD 120000, Down := 7060504030201, FOld
FormatTime, D,% 8 Down,% Format?FOld:=Trim(Format):FOld
For all, V in ["Date","D"], Date := Trim(Date) ; add missing leading zeros
%V% := RegExReplace(%V%, "(?<=^|\D)(\d)(?=\D|$)", "0$1")
Loop, Parse,% (0 Down, N := Noon) ; today's noon
IF A_LoopField And Pos := InStr(D, A_LoopField)
N := SubStr(N,1,A_Index-2) SubStr(Date,Pos-1,2) SubStr(N,A_Index+1)
Return, N ; digits >0 from Down in D stand for Date's values
}
Re: Zeitstempel
Ich hab's nun mit einem 3-Zeiler gemacht ... bin ja bloss so ein einfach+geradeaus-Coder ...
gruss
gero
Code: Select all
TIME:="23.03. 2023 08:21:53"
TIME := RegExReplace(TIME, "\D")
StringSplit,a,TIME
TIME := a5 . a6 . a7 . a8 . a3 . a4 . a1 . a2 . a9 . a10 . a11 . a12 . a13 . a14
MsgBox,4096,Info,% TIME
gero
Re: Zeitstempel
Hallo gero!
Es ginge auch mit einer Zeile
Es ginge auch mit einer Zeile
Code: Select all
TIME:="23.03. 2023 08:21:53"
MsgBox, % RegExMatch(TIME, "O)(\d{2})\.(\d{2})\.\s(\d{4})\s(\d{2}):(\d{2}):(\d{2})", M) ? M.3 M.2 M.1 M.4 M.5 M.6 : "" ; speichert die Teilergebnisse in ein Objekt (M)
Re: Zeitstempel
Ich noch mal.
Tolles Forum hier ... bin immer wieder beeindruckt, wie viele Lösungsansätze AHK bietet.
Ich für meinen Teil verwende halt vorzugsweise Code, den ich auch verstehe, also nachvollziehen kann.
Trotzdem Dickes Danke für eure Ideen + Hilfe.
gruss
gero
Tolles Forum hier ... bin immer wieder beeindruckt, wie viele Lösungsansätze AHK bietet.
Ich für meinen Teil verwende halt vorzugsweise Code, den ich auch verstehe, also nachvollziehen kann.
Trotzdem Dickes Danke für eure Ideen + Hilfe.
gruss
gero
Re: Zeitstempel
Hallo gero!
Das sehe ich auch so, jeder muss seinen eigenen Weg finden. Viele Wege führen zum Ziel.
Aber meiner Erfahrung nach ist kürzer meist besser (weniger Code = weniger Fehler).
VG
Das sehe ich auch so, jeder muss seinen eigenen Weg finden. Viele Wege führen zum Ziel.
Aber meiner Erfahrung nach ist kürzer meist besser (weniger Code = weniger Fehler).
VG