Zeitstempel Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

gero
Posts: 168
Joined: 02 Oct 2013, 05:36

Zeitstempel

Post by gero » 23 Mar 2023, 06:33

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

just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Zeitstempel  Topic is solved

Post by just me » 23 Mar 2023, 06:52

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:

Code: Select all

EditZeitstempel := "2023-03-23 08:21:53"
DateiZeitstempel := RegExReplace(EditZeitstempel, "\D") ; alles entfernen, das keine Ziffer ist
Ansonsten musst Du das per Hand umbasteln oder eine passende Benutzerfunktion finden. Eingebaut gibt es das nicht.

gero
Posts: 168
Joined: 02 Oct 2013, 05:36

Re: Zeitstempel

Post by gero » 23 Mar 2023, 07:06

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

Rohwedder
Posts: 7614
Joined: 04 Jun 2014, 08:33
Location: Germany

Re: Zeitstempel

Post by Rohwedder » 23 Mar 2023, 08:26

Hallo,
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
}

gero
Posts: 168
Joined: 02 Oct 2013, 05:36

Re: Zeitstempel

Post by gero » 23 Mar 2023, 08:49

Ich hab's nun mit einem 3-Zeiler gemacht ... bin ja bloss so ein einfach+geradeaus-Coder ... :)

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
gruss
gero

fredchf
Posts: 54
Joined: 30 Sep 2013, 14:55

Re: Zeitstempel

Post by fredchf » 23 Mar 2023, 18:37

Hallo gero!
Es ginge auch mit einer Zeile :D

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)

gero
Posts: 168
Joined: 02 Oct 2013, 05:36

Re: Zeitstempel

Post by gero » 23 Mar 2023, 19:13

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

fredchf
Posts: 54
Joined: 30 Sep 2013, 14:55

Re: Zeitstempel

Post by fredchf » 24 Mar 2023, 01:44

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

Post Reply

Return to “Ich brauche Hilfe”