Page 1 of 1

GetDSDT() [UDF]

Posted: 28 Jul 2017, 03:47
by BoBo
Zu folgender anfrage: https://autohotkey.com/boards/viewtopic.php?f=5&t=28355
... hat 'just me' einen satz funktionen bereitgestellt, welcher eine lokale systemabfrage zur 'sommer/winterzeit' ermöglicht! :thumbup:

Dazu wird aus der registry die lokale zeitzone ermittelt - und darauf basierend, ob ein zeitraum für 'sommer/winterzeit' (DSDT/STDT) definiert ist.
Nun ist es einfach festzustellen, ob die aktuelle systemzeit innerhalb dieses zeitraums liegt. Dazu benutzen wir eine funktion von 'VxE'.

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus


8-)

Re: GetDSDT() [UDF]

Posted: 28 Jul 2017, 04:19
by BoBo
Frage an 'just me' ...
Ich habe nicht explizit nach der für die MESZ/CEST resultierenden zeitdifferenz geschaut (UTC+02:00).
Wäre diese jedoch noch in deinem funktionsatz gebunkert, ließe sich damit doch ggf (nach formatierung) der nackte UTC output deiner GetNetworkTime()-UDF bespaßen?!
Return % DateBetween(GetNetworkTime()+zeitdifferenz,DSDT,STDT) = 0 ? "STDT" : "DSDT"

Re: GetDSDT() [UDF]

Posted: 28 Jul 2017, 05:41
by just me
Ich denke mal darüber nach.

Re: GetDSDT() [UDF]

Posted: 28 Jul 2017, 06:26
by just me
Sodele, die Funktion TZI2TIMEZONEINFORMATION()versorgt auch die Zeitdifferenzen (Bias) in der TIME_ZONE_INFORMATION Struktur. Diese Differenzen sind in Minuten abgelegt. Du kannst sie Dir von dort wie folgt holen:

Code: [Select all] [Download] GeSHi © Codebox Plus

; Bias: Abweichung UTC <> lokale Zeit in Minuten
Bias := NumGet(TIMEZONEINFORMATION, 0, "Int")
; StandardBias: zusätzliche Abweichung während der Standardzeit in Minuten - bisher immer 0
StdB := NumGet(TIMEZONEINFORMATION, 84, "Int")
; DaylightBias: zusätzliche Abweichung während der Sommerzeit in Minuten
DltB := NumGet(TIMEZONEINFORMATION, 168, "Int")

Die Umrechnung UTC <> lokale Zeit ist zunächst einmal so definiert:

Code: [Select all] [Download] GeSHi © Codebox Plus

UTC := LokaleZeit + Bias + StandardBias
; bzw.
LokaleZeit := UTC - Bias - StandardBias

Während der Sommerzeit kommt noch ein +/- DaylightBias dazu.

Re: GetDSDT() [UDF]

Posted: 28 Jul 2017, 06:32
by BoBo
just me wrote:Sodele, die Funktion TZI2TIMEZONEINFORMATION()versorgt auch die Zeitdifferenzen (Bias) in der TIME_ZONE_INFORMATION Struktur. Diese Differenzen sind in Minuten abgelegt. Du kannst sie Dir von dort wie folgt holen:

[...]

Während der Sommerzeit kommt noch ein +/- DaylightBias dazu.

Als hätte ich es geahnt :lol: :thumbup: Wo doch in der US politik aktuell sehr oft der begriff "biased" auftaucht :wtf:
Thx für die recherche zur erweiterten funktionalität! M(u..) a(p..) !! ;)

(Fast) letzte frage, welche aufgabe hat die funktion GetWDayInMonth(), heißt, in welchem kontext wird diese information benötigt ??
Merci fürs schlaumachen :)

Re: GetDSDT() [UDF]

Posted: 28 Jul 2017, 08:28
by just me
Das ist der 'trickreiche' Teil. Die Schaltzeiten für die Sommer- und Winterzeit können entweder auf einem festen Datum liegen (immer am 01.04.) oder variabel sein (letzter Sonntag im März).

Bei festen Daten enthält die Registry die Information Jahr, Monat, Tag, Stunde, Minute, Sekunde. Zur Bestimmung des Datums muss dann nur das Jahr gegen das gewünschte ausgetauscht werden.

Bei variablen Daten ist das Jahr 0 und Tag enthält das Vorkommen des gewünschten Wochentags (WDay, 1 - 5, 5 = letzter), der hier ebenfalls angegeben sein muss (DayOfWeek). Für die Berechnung müssen dann das gewünschte Jahr eingesetzt und der zugehörige Tag ermittelt werden. Das macht GetWDayInMonth().

Das Verfahren hat Microsoft in der Beschreibung zu TIME_ZONE_INFORMATION dokumentiert.