Page 1 of 1

Dezimalzahl in Zeitformat konvertieren

Posted: 01 Jan 2017, 05:23
by LuckyJoe
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

Re: Dezimalzahl in Zeitformat konvertieren

Posted: 01 Jan 2017, 06:21
by just me
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!

Re: Dezimalzahl in Zeitformat konvertieren

Posted: 01 Jan 2017, 09:46
by LuckyJoe
... 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 

Re: Dezimalzahl in Zeitformat konvertieren

Posted: 01 Jan 2017, 10:47
by just me
OK, ist verlinkt!

Re: Dezimalzahl in Zeitformat konvertieren

Posted: 08 Jan 2018, 05:20
by LuckyJoe
... 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