(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:
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.
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 367579
Url: https://administrator.de/contentid/367579
Ausgedruckt am: 26.11.2024 um 07:11 Uhr
4 Kommentare
Neuester Kommentar
Hi,
teste mal folgendes (als Batchfile abspeichern):
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
Falls Du die Zeit incl. Datum benötigst, entferne in Zeile 14
In Zeile 17 kannst Du mit der Ausgabe des Scripts (steht in der
Grüße
Friemler
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
Oder auch so
Wo der Offset eingetragen wird sollte man sehen können . 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
@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%
Grüße Uwe