PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tool zur Ermittlung der Sommer- / UTC-Zeit


Huabaer
2008-04-08, 11:08:58
Hallo,

habe folgendes Problem: Ich will (automatisiert) die Zeitdifferenz zwischen zwei Zeitangaben in Sekunden angeben. Soweit auch kein Problem. Leider weiß ich nun, dass die eine Zeitangabe in UTC angegeben ist und die andere aus der Windowszeit stammt. Jetzt habe ich entweder die Möglichkeit, die UTC-Zeit in die Windowszeit umzurechnen oder umgekehrt. Bei beiden Möglichkeiten müsste ich aber auch ermitteln, ob wir gerade Sommer- oder Winterzeit haben, richtig? Könnt ihr mir da bitte weiterhelfen?

Grüße
Christoph

mapel110
2008-04-08, 11:35:23
Sommer und Winterzeit, da musst du checken, ob das letzte Märzwochenende in deiner Abfrage vorkommt und/oder das letzte Oktober-Wochenende.
Zur Ermittlung der Sommer und Winterzeit dürfte das Windows-Datum weniger problematisch sein, wobei das errechnen des Zeitunterschieds dann wieder schwieriger wird. Ich würde beide Wege nutzen.

Welche Programmiersprache verwendest du überhaupt?

Huabaer
2008-04-08, 11:47:54
Danke schonmal für deine Hilfe. Ich benutze VisualBasic-Script. Im Moment sieht der Code so aus:

diff_tag = left(datum, 2) - left(right(datei.name, 6), 2)
diff_std = left(zeit, 2) - left(right(datei.name, 4), 2)
diff_min = left(right(zeit, 5), 2) - right(datei.name, 2)
diff_gesamt = diff_tag * 60 * 24 + diff_std * 60 + diff_min
if diff_gesamt > 600 then datei.delete

Die Variablen "datum" und "zeit" sind aus Windows entnommen. "datei.name" ist ein Dateiname, der den Monatstag, die Stunden und Minuten (in UTC) beinhaltet.

Gruß
Christoph

Huabaer
2008-04-10, 21:34:30
Keiner ne Idee?

Gruß

Sephiroth
2008-04-10, 21:58:54
Reicht es nicht die Differenz zw. der UTC-Zeit und dem lokalen Wert der aktuellen Zeit als Offset zu nehmen?
Schau dir mal die JScript UTC Methode (http://msdn2.microsoft.com/en-us/library/wz6stk2z(VS.85).aspx) an, sieht auf den ersten Blick ähnlich aus.

Huabaer
2008-04-11, 14:23:00
Die JScript-Methode sieht gut aus. Leider habe ich etwas vergleichbares für VB(S) nicht gefunden. Was meinst du mit Differenz als Offset nehmen?

Danke und Gruß

Sephiroth
2008-04-11, 23:48:09
Ja, äh, war eh Käse. ;D

Die Zeitdifferenz der lokalen Zeit, an die man leicht mit VBS herankommt, und UTC, steht bei Windows in der Registry unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation als DWORD Namens ActiveTimeBias. Der Wert ist die Summe von Bias und DaylightBias.

Den Wert von ActiveTimeBias brauchst du nur auslesen und zu der lokalen Zeit hinzuaddieren, um auf UTC zu kommen.

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "SYSTEM\CurrentControlSet\Control\TimeZoneInformation"
strValueName = "ActiveTimeBias"
oReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue
WScript.Echo "ActiveTimeBias: " & dwValue

siehe auch Where do Windows 2000 and Windows NT store time zone information? (http://windowsitpro.com/article/articleid/14966/where-do-windows-2000-and-windows-nt-store-time-zone-information.html)

GetDWORDValue Method of the StdRegProv Class (http://msdn2.microsoft.com/en-us/library/aa390445(VS.85).aspx)

Huabaer
2008-04-12, 10:14:47
Es klappt einwandfrei. Danke für Deine Bemühungen!

Gruß
Christoph