unauthorized-user
Goto Top

(Batch) Systemzeit von zusätzlicher Uhr, bzw. anderer Zeitzone auslesen

Guten Tag an alle,

ich stehe gerade vor einem Problem, von dem ich dachte, dass das nicht sehr aufwendig ist. Bei längerem drüber nachdenken kamen mir allerdings Zweifel.
Ich benötige für eine Batch-Datei (liegt auf einem Server in Deutschland) eine Funktion, die die Uhrzeit von einer anderen Zeitzone ausließt.

Momentan nimmt die Funktion die aktuelle Systemzeit und setzt diese in Variablen, um sie später im Dateinamen wieder einzufügen:

FOR /f %%a IN ('WMIC OS GET LocalDateTime ^| FIND "."') DO SET DTS=%%a  
SET Datum=%DTS:~0,8%_%DTS:~8,4%


Jetzt kam mir die Idee, dass man bei Windows mehrere Uhren einstellen kann. Nur gibt es für zusätzliche Uhrzeiten eine Funktion um diese auszulesen?

Ein anderer Ansatz wäre.

aktuelle Systemzeit + den Zeitunterschied = Zeitzone

Hier käme man allerdings schnell zu Fehlern, bei bspw. 22 Uhr + 8 = 30Uhr... Was es so ja nicht gibt.


Falls man zusätzliche Uhrzeiten auslesen kann, wäre das natürlich der Idealfall. Dazu habe ich nur leider nichts gefunden.
Eine hilfreiche Idee wäre super!

MfG

Content-ID: 367579

Url: https://administrator.de/contentid/367579

Ausgedruckt am: 26.11.2024 um 07:11 Uhr

brammer
brammer 09.03.2018 um 15:03:53 Uhr
Goto Top
Hallo,

dass man bei Windows mehrere Uhren einstellen kann

Wo?

Meinst du sowas wie eine Weltuhr?
Das sind nur Ableitungen von der Systemzeit ....

brammer
unauthorized-user
unauthorized-user 09.03.2018 um 15:35:46 Uhr
Goto Top
Hallo

in den Datums- & Uhrzeiteinstellungen unter dem Reiter "Zusätzliche Uhren".

Ich dachte, die Uhrzeit wird trotzdem irgendwo hinterlegt, so dass diese dann per Befehl auch abgerufen werden kann. Aber da denke ich wohl zu Simpel.

per
w32tm /computers
könnte man zwar einen Server auswählen, auf dem die Uhrzeit geändert wurde... auf einem Server die Uhrzeit umzustellen ist allerdings auch nicht Sinn des ganzen.

Schade! Aber Danke für den Hinweis.

Gruß
Friemler
Friemler 09.03.2018 um 21:48:10 Uhr
Goto Top
Hi,

teste mal folgendes (als Batchfile abspeichern):
@echo off & setlocal

set /a "TimeZoneOffset=-120"  

set "VBScript=%TEMP%\GetLocalTime.vbs"  

> "%VBScript%" echo.Set objOS         = GetObject("winmgmts:\\.\root\cimv2:Win32_OperatingSystem=@")  
>>"%VBScript%" echo.Set objDateTime   = CreateObject("WbemScripting.SWbemDateTime")  
>>"%VBScript%" echo.  
>>"%VBScript%" echo.objDateTime.Value = objOS.LocalDateTime  
>>"%VBScript%" echo.datLocalDateTime  = objDateTime.GetVarDate(True)  
>>"%VBScript%" echo.datDateTime       = DateAdd("n", WScript.Arguments(0), datLocalDateTime)  
>>"%VBScript%" echo.  
>>"%VBScript%" echo.WScript.Echo TimeValue(datDateTime)  

for /f "delims=" %%a in ('cscript /nologo "%VBScript%" %TimeZoneOffset%') do (  
  echo %%a
)

del "%VBScript%" > NUL  

In Zeile 3 kannst Du den Offset der gewünschten Zeitzone in Minuten einstellen. Falls Du den Offset als erstes Argument an das Script übergeben möchtest, ersetzt Zeile 3 durch
set /a "TimeZoneOffset=%~1" 

Falls Du die Zeit incl. Datum benötigst, entferne in Zeile 14 TimeValue und die runden Klammern, in die datDateTime eingeschlossen ist.

In Zeile 17 kannst Du mit der Ausgabe des Scripts (steht in der FOR-Laufvariablen %%a) weiterarbeiten (Zuweisung an normale Variable usw.).

Grüße
Friemler
colinardo
colinardo 12.03.2018 aktualisiert um 16:15:53 Uhr
Goto Top
Oder auch so
@echo off
for /f "delims=" %%a in ('powershell -Ex ByPass -C "[DateTime]::UtcNow.AddMinutes(60).toString('dd.MM.yyyy HH:mm:ss')"') do set "tm=%%a"  
echo %tm%
Wo der Offset eingetragen wird sollte man sehen können face-wink. Das Ausgabeformat kannst du nach Bedarf in der toString() Methode anpassen. Wenn statt einem Minuten-Offset ein Stundenoffset gewünscht ist einfach das AddMinutes durch AddHours ersetzen. Als Wert dürfen dort natürlich auch negative Werte stehen, also etwa -6.

Grüße Uwe