GetDSDT() [UDF]

Post a reply

Confirmation code
Enter the code exactly as it appears. All letters are case insensitive.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: GetDSDT() [UDF]

Re: GetDSDT() [UDF]

Post by just me » 28 Jul 2017, 08:28

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.

Re: GetDSDT() [UDF]

Post by BoBo » 28 Jul 2017, 06:32

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]

Post by just me » 28 Jul 2017, 06:26

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]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]GeSHi © Codebox Plus

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

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

Re: GetDSDT() [UDF]

Post by just me » 28 Jul 2017, 05:41

Ich denke mal darüber nach.

Re: GetDSDT() [UDF]

Post by BoBo » 28 Jul 2017, 04:19

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"

GetDSDT() [UDF]

Post by BoBo » 28 Jul 2017, 03:47

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]GeSHi © Codebox Plus


8-)

Top