Dezimalzahl in Zeitformat konvertieren

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
LuckyJoe
Posts: 265
Joined: 02 Oct 2013, 09:52

Dezimalzahl in Zeitformat konvertieren

01 Jan 2017, 05:23

Hallo zusammen,

zunächst allen ein frohes neues Jahr!

Ich möchte gerne eine Dezimalzahl in einen Zeitstring umwandeln. Die Dezimalzahl erhalte ich durch das Auslesen einer Excel-Zelle, die Zeitformate offensichtlich nur als Dezimalzahlen übergibt (z.B. 0.524306 für 12:35). Ich möchte die dazugehörige Uhrzeit nun in einem anderen Programm weiterverwenden, das aber das Zeitformat ("HH:MM") verlangt. Ich habe das zunächst durch eine Funktion gelöst:

Code: Select all

Excel    := ComObjActive("Excel.Application")
WorkBook := Excel.ActiveWorkbook
Sheet    := Excel.ActiveSheet
Cell     := Excel.ActiveCell
Zellwert := Cell.Value
Zellwert := DezToTime(Zellwert)
Msgbox,,, % Zellwert, 5

DezToTime(DezZahl)
{
	Uhrzeit := DezZahl * 24
	Transform, HH, Floor, Uhrzeit
	MM := (Uhrzeit - HH) * 60
	Transform, MM, Floor, MM
	Return SubStr("00" . HH, -1) ":" SubStr("00" . MM, -1)
}
Ich überlege aber, ob es nicht eine einfachere, vielleicht eine AHK-interne Funktion gibt, die die Konvertierung übernimmt, habe dazu in der Hilfe aber nichts gefunden. Hat jemand einen anderen Ansatz?

Danke im Voraus
Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
just me
Posts: 7114
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Dezimalzahl in Zeitformat konvertieren

01 Jan 2017, 06:21

Moin,

eine interne Funktion gibt es nicht, aber vielleicht eine 'einfachere':

Code: Select all

#NoEnv
ExcelZeit := 0.524306
Uhrzeit := A_YYYY ; 00:00 Uhr
Uhrzeit += % Floor(ExcelZeit * 1440), M ; 24 * 60 Minuten = 1 Tag
FormatTime, UhrZeit, %Uhrzeit%, HH:mm
MsgBox, %UhrZeit%
Frohes neues Jahr!
User avatar
LuckyJoe
Posts: 265
Joined: 02 Oct 2013, 09:52

Re: Dezimalzahl in Zeitformat konvertieren

01 Jan 2017, 09:46

... Danke - Perfekt!

Ich habe jetzt noch lange nach der Bedeutung von ..., M in deiner 4. Code-Zeile gesucht und bin so auf deine Sammlung Datum und Zeit in AHK gestoßen - cool, wieder dazugelernt :-)
Könnte man doch dort noch mit aufnehmen, falls mal wieder jemand aus Excel Zeit-Werte auslesen will.

Funktion:

Code: Select all

DezToTime(DezZahl)
{
	Uhrzeit := A_YYYY 							; 00:00 Uhr
	Uhrzeit += % Floor(DezZahl * 1440), M		; 24 * 60 Minuten = 1 Tag
	FormatTime, UhrZeit, %Uhrzeit%, HH:mm
	Return % UhrZeit
}
Anwendungsbeispiel:

Code: Select all

ExcelZeit := 0.524306			; Dezimalzahl, wie sie aus Excel für "12:35" zurückgegeben wird
Msgbox, % DezToTime(ExcelZeit) 	; ==> 12:35 
Herzliche Grüße aus dem Rheinland
Lucky Joe
just me
Posts: 7114
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Dezimalzahl in Zeitformat konvertieren

01 Jan 2017, 10:47

OK, ist verlinkt!
User avatar
LuckyJoe
Posts: 265
Joined: 02 Oct 2013, 09:52

Re: Dezimalzahl in Zeitformat konvertieren

08 Jan 2018, 05:20

... ups ... habe nach einem Jahr bemerkt, dass die Funktion ungenau ist. So "rundet" sie z.B. aus "16:20" (dezimal: 0,680555556) die Dezimalzahl zu 0,680556, womit dann aber nach der Konvertierung zu einer Uhrzeit "16:19" herauskommt. Daher - der Vollständigkeit halber - die Formel umgewandelt (ohne "Floor") zu:

Code: Select all

DezToTime(DezZahl)
{
	Uhrzeit := A_YYYY 							; 00:00 Uhr
	Uhrzeit += % (DezZahl * 1440), M				; 24 * 60 Minuten = 1 Tag
	FormatTime, UhrZeit, %Uhrzeit%, HH:mm
	Return % UhrZeit
}
Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: Bing [Bot] and 2 guests