Dieser Beitrag ist schon älter. Bitte vergewissern Sie sich, dass die Rahmenbedingungen oder der enthaltene Lösungsvorschlag noch dem aktuellen Stand der Technik entspricht.

Internationales Datum und Zeitzone bestimmen

Mitglied: DaSilva

Hilfe bei kleinem Batchscript benötigt.

Ich möchte in eine Datei das Datum inkl. Wochentag und Uhrzeit schreiben.
Die deutsche Version ist auch fertig, nur die englische bereitet mir noch Probleme.
Wie kann ich das Datum als MM-TT-YYYY statt TT.MM.YYYY ausgeben lassen ohne die Tastatur oder sonstige Regionaleinstellungen zu ändern?
Der bisherige Code sieht so aus:


Ergebnis:


Zusätzlich sollte auch die Zeit im zwölf Stunden Format angezeigt werden (geht immer nur um die ZeitEn.cfg) und würde man das im Englischen überhaupt so formulieren?
Als letzter Punkt wäre noch interessant wenn UTC+1 oder UTC+2 angegeben werden kann, je nachdem ob gerade Sommerzeit herrscht oder nicht.

Danke für Hilfe.
Kommentar vom Moderator Biber am 24.03.2010 um 20:28:24 Uhr
Habe diesen Beitrag heute auf "gelöst" gesetzt.
Eigentlich ist das ja fast ein Teil 4 des "Batch for Runaways"-Wokshops geworden... der sollte auch auf "benutzer.de" sichtbar sein.

Content-Key: 90078

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

Ausgedruckt am: 30.11.2021 um 12:11 Uhr

Mitglied: Biber
Biber 19.06.2008 um 00:26:26 Uhr
Goto Top
Moin DaSilva,

Rückfragen:
  • soll das Skript nur auf deinem Rechner laufen oder auf "beliebigen"?
  • falls "beliebig": Betriebssystem W2K/XP/Vista und mal als DE, mal als US-Version?
  • WhoThe... wer bitte erwartet von Dir die Info, ob auf dem Rechner automatisch Sommerzeit angezeigt wird???? Wo das in der Registry steht, weiß außerhalb von Redmond eine Handvoll Spinner Entwickler.

[Zu 1 und 2: In deinem Skriptchen gehst Du ja davon aus, dass das deutsche XP-Datumsformat gegeben ist; bei W2000 oder bei englischem Datumsformat würde die %date%-Auswertung ja nicht laufen.]

Grüße
Biber
Mitglied: DaSilva
DaSilva 19.06.2008 um 00:51:54 Uhr
Goto Top
Erstmal würde es auf meinem Rechner (Vista DE) reichen. Universell wäre aber nett.

Falls man die Zeitzone nicht irgendwo heraus bekommt, gibt es keine Abfrage?

"Derzeit beginnt die mitteleuropäische Sommerzeit jeweils am letzten Sonntag im März um 2 Uhr mitteleuropäischer Zeit. Zum Zeitpunkt des Beginns der Sommerzeit wird die Stundenzählung um eine Stunde von 2 Uhr auf 3 Uhr vorgestellt. Die Sommerzeit endet jeweils am letzten Sonntag im Oktober um 3 Uhr mitteleuropäischer Sommerzeit. Zum Zeitpunkt des Endes der Sommerzeit wird die Stundenzählung um eine Stunde von 3 Uhr auf 2 Uhr zurückgestellt."
Mitglied: Biber
Biber 19.06.2008 um 20:38:30 Uhr
Goto Top
Moin DaSilva,

danke Dir für die aufmunternde Sommerzeit-Definition....
Aber leider kann man/frau im Batch keine Datumsberechnungen machen.
Es gibt schlicht und einfach keinen Datentyp "Datum" im CMD-Interpreter.

Siehe oben bei den Verrenkungen, die Du zur Wochentagsberechnung machen musstest.

Also: ich sehe drei oder vier Möglichkeiten:
  • Im obigen Batch das angelsächsische Datumsformat durch Substring-Funktionen bezogen auf die (vermutlichen) TAG und MONAT-Werte hinfrickeln. Wird dann vollkommen irrwitzig, wenn Du diesen Batch dann auf einem EN- oder US-sprachigen W2000-Rechner startest
  • Im Anfang irgendwie das Datum via Utility "sprachunabhängig" ermitteln lasssen. Zum Beispiel das Now.exe aus dem ResKit kann so etwas.
  • oder alles ohne Drittutilities mit Batch/Reg.exe aus/mit der Registry abfackeln.

Was die GMT/UTC-Abweichung/Berechnung betrifft... geht nur entweder über Registry (was ich mir grad noch zutraue) oder über dubiose Win-API-Calls von GetTimeToLocalTime() oder so ähnlich. Was ich nicht freiwillig für eine Benutzer-Display-Meldung anfasse.

Lohnen sich Aufwand und Nutzen?

Grüße
Biber




[Edit Biber 21.06.2008]
Recommended - was wohl nicht so herauskam - ist der Weg über Utilities, "die das können". Z.B. Now.exe aus dem ResKit oder ein Tool wie ShowDate vom geschätzten Forumsmitglied Axel Hahn, s.u. Links in "Batch und Shell".
Alle folgenden Kommentare haben eher Workshop-Charakter und sind nicht unbedingt Empfehlungen für produktive Lösungen.
[/Edit]

Mitglied: DaSilva
DaSilva 20.06.2008 um 17:13:49 Uhr
Goto Top
Hmmm, wahrscheinlich eher nicht ;)
Trotzdem danke.
Mitglied: Biber
Biber 20.06.2008 um 17:31:16 Uhr
Goto Top
Na ja, DaSilva,

ich will ja nicht, dass Du so betrübt ins Wochenende gehst...
Bezüglich der Zeitzonen-Infos hab ich noch mal schnell was zusammengeharkt.

Wenn Du XP/Vista hast und die Reg.exe (ist Standard bei denen) und auf HKLM zugreifen kannst, dann tut es dieser Schnipsel.

Output:

... wobei, wenn ich die Registry-Werte richtig interpretiere dort für meinen Rechner herauskommen müsste, dass er momentan 1 Stunde zur GMT-Zeit versetzt + 1 Stunde wg. Sommerzeit vorgestellt ist, also [Zeile Act-Differenz] alles in Allem +2 Std Differenz vorzuweisen hat.

Grüße
Biber
Mitglied: DaSilva
DaSilva 20.06.2008 um 18:15:53 Uhr
Goto Top
Waoh, danke.
Das mit der englischen Zeitangabe ist auf einem deutschen System wohl nicht möglich!?
Mitglied: Biber
Biber 20.06.2008 um 18:38:04 Uhr
Goto Top
Moin DaSilva,

natürlich ist es möglich... alles außer Brotschneiden geht per Batch.

Nur die Strategie ist die Frage - siehe oben, wo ich mich über mögliche Wege ausgelassen habe.

Das Datumsermittlung im Windows-Batch ist ja nicht nur zwei-, sondern eher schon dreischneidig.

  • Erstens kennt die CMD.exe keine Datums-Arithmetik. Alles ist "Text".
  • Zweitens bekommst Du, wenn Du am CMD-Prompt nach Datum und Zeit fragst, irgendetwas menschenlesbares (mit/ohne Wochentag abgekürzt oder ausgeschrieben, in der Reihenfolge TTMMJJJJ oder MM/DD/YYYY oder als YYYY-MM-DD... ) und Du weißt nicht was Du bekommst
  • Drittens ist diese ganze "Regions- und Spracheinstellung"-Arie so dermaßen zusammengeschlampert von den redmonder Praktikanten, dass ich mittlerweile auch so wesentlich brutaleren Methoden bei der Datumsermittlung greife als M$ sich trauen würde.

In meinem Workshop "Batch for Runaways III" (siehe unten unter mögliche Anleitungen) hatte ich noch geschrieben, ich muss halt das "unstruktierte" und beliebige Datums/Zeitformat normalisieren, das mir vom Tisch des sympathischen Weltmarktführers in den Schoß bzw. in den Batch fällt

Shice drauf. Sehe ich lockerer inzwischen.
Jetzt schiesse ich halt das Datumsformat selber per Registry um und bekomme dann Tage, Monate, Jahre und auch Wochentage wann und wo ich will.
Und hinterher stelle ich den alten Zustand wieder her.

Beispiel.
Output dieses Schnipsels:
[--vorsichtig testen und nicht blind verkaufen-- ist nur schnell zusammengeschrotet]

Die ganze Wochentagsberechnung z.B spar ich mit, indem ich einfach das datums-Anzeigeformat auf "ddd" setze statt das "dd.MM.yyyy" hinzunehmen.
Siehe in Zeile 33ff.
So bekomme ich bei einem "date /t" die Ausgabe "Fr"... *g

Aber ich gebe zu, dass so ein Vorgehen natürlich kein Professionelles ist.
...kann auch gut damit leben....

Grüße
Biber
[Edit] Umgang mit vorhandenen {leeren} Registry-Werten geändert - setNewValue/SaveOldValue angepasst. Siehe unten. [/Edit]
Mitglied: DaSilva
DaSilva 20.06.2008 um 19:17:01 Uhr
Goto Top
Das ist unglaublich!
Leider bekomme ich folgende Fehlermeldung:

Fehler: "HKEY_CURRENT_USER\Control Panel\International" value "s1159" nicht gefunden

Kann das an Vista liegen?
Mitglied: Biber
Biber 20.06.2008 um 22:58:23 Uhr
Goto Top
Moin DaSilva,

Kann das an Vista liegen?
Teils, teils.
Dass diese Fehlermeldung kommt, "ist ein beabsichtigtes Verhalten" (um eine bekannte Redmonder Softwareklitsche zu zitieren). Works as designed, wie wir Biber sagen.

Oben im Schnipsel kannst Du nachverfolgen, dass ich natürlich erst versuche, die vorhandenen HKCU-Werte des Users zu lesen und zu sichern, bevor ich sie mit irgendeinem Dreck überschreibe.
Wenn es die Werte nicht gibt, steigt das Skript (kontrolliert) aus.
Den Schlüssel "sShortDate", in dem so etwas wie "dd.MM.yyyy" bei Dir stehen wird, den hat er gefunden.
Die beiden Werte "s1159" und "s2359" sind bei Dir wohl nicht definiert, weil Du -trotz Deiner Anglophilie- noch nie mit Us-Datumsformat gearbeitet an diesem Rechner.
--> definiere sie einfach. Liest /interpretiert außer meinem Skript ja keiner.

Bitte an den CMD-Prompt:
"vm" für vormittach, "nm" für nachmMittach
Oder jeweils auf "". (Leerstring)
-->vollkommen wurscht, sieht keiner.
Die bei Dir vorhandenen Werte solltest Du Dir am besten einmal anzeigen und kopieren:
Dann schauen wir weiter.

Grüße
Biber
Mitglied: DaSilva
DaSilva 20.06.2008 um 23:53:06 Uhr
Goto Top
Danke, jetzt hat alles geklappt.
Hier ist das an meine Bedürfnisse angepasste Script:


Wie du siehst läuft es in einer Endlosschleife da die Zeit sekundengenau in der *.cfg landen soll solange das Script läuft. Ist es schlimm, dass dadurch die letzten Zeilen nicht mehr aufgerufen werden?
Zudem noch eine letzte Frage um mich vollkommen glücklich ins Wochenende zu schicken ;)

1. Ist es möglich bei der englischen Uhrzeit auch die Sekunden mit anzugeben (11:52:11 PM)?

Über eine letzte Optimierung aufgrund dieses Scripts würde ich mich sehr freuen. Danke vielmals! Mehr Kompetenz gibt es wohl nicht in diesem Bereich!
Mitglied: Biber
Biber 21.06.2008 um 01:15:28 Uhr
Goto Top
Moin DaSilva,

zu Deiner Frage "Uhrzeit auch mit Sekunden möglich"...

Ich fürchte: Nein.
Jedenfalls nicht ohne nun doch wieder selbst etwas mit Substr-Funktionen zusammenzustoppeln.

Grund ist diese [Disclaimer: Dies ist die ganz persönliche Meinung eines anonym angemeldeten Forenmitglieds und sollte nicht dem Betreiber dieses Forums angelastet werden.] buggybuggybuggy-Implementierung von Bills Bande.

Die Ausgaben von "date/t" und %date% und die Ausgaben von "time/t" und %time% sind nicht gleich.
Beispiel für (deutsche) Zeit:
--->How The ..Kuckuck kommt so etwas durch die Qualitätskontrolle?
Ebenso unglaublich, dass hinter der Ausgabe von "date/t" ein übersehenes Leerzeichen hängt (siehe die Ausgaben in meinem Schnipsel oben).
Praktikantenpfusch.

Anyhow, die Registry-Werte, die wir hier manipulieren, sind immer sofort bei date/t und time/t wirksam... aber bei time/t ist mir keine Holzhammermethode bekannt, mit der ich via Registry die Sekunden mit anzeigen lassen kann.

Eventuell kannst Du es mal versuchen, ob Du über Klickibunti (Einstellungen->Regions- und Spracheinstellungen->Datum und Uhrzeit") eine solche Möglichkeit findest.
Und dann in der Registry nachschauen, was sich geändert hat.

Oder mal abwarten, ob jemand anderes vielleicht mal darüber gestolpert ist und das hier postet.

Zwei Anmerkungen noch zu Deinem Skript:
Die ganzen ausgeREMten Zeilen kannst Du, wenn Du die nicht wegwerfen willst, überspringen,wenn Du in Zeile 99 aus dem ":loop" ein "goto :loop" machst und diese Sprungmarke :loop" nach Zeile 111 setzt.

Und statt "sleep 1" würde ich ein "sleep 30" oder so setzen...
...wir wollen es doch nicht übertreiben.
Hey, ist nur ein Batch... kein Satellitensteuerungsprogramm...

Grüße
Biber
Mitglied: DaSilva
DaSilva 21.06.2008 um 02:06:21 Uhr
Goto Top
Danke, das wärs dann soweit.
Kann es sein, dass %deDate%, %endate% und %date% zu verschiedenen Uhrzeiten mal ein Leerzeichen vor oder hinter dem eigentlichen Wert haben?
Zuerst hatte ich noch "%deDate% um %time:~0,8%" was dann "20.06.08 um 20:15:00" ergab, dann habe ich es zu "%deDate%um %time:~0,8%" geändert um das doppelte Leerzeichen zu umgehen und jetzt gerade war ein doppeltes Leerzeichen hinter um (oder vor %time:~0,8%) was mich gar zu "%deDate%um%time:~0,8%" bewegte. Jetzt weiß ich noch nicht ob ich mich eben verguckt habe oder ob es mit der Zeit zu tun hat aber jedenfalls ist da irgendwas krumm.
Bei der englischen Zeit dagegen reicht derzeit ein "%endate%at %EnTime%" für die richtige Darstellung ohne zu viele Leerzeichen.
Ist dir da etwas bekannt bzw. kannst du das nachvollziehen?
Mitglied: Biber
Biber 21.06.2008 um 13:15:44 Uhr
Goto Top
Moin DaSilva,

wie geschrieben, ich halte die vorhandene M$-Implementierung der Regions/Spracheinstellungen für suboptimal...
Und Dein wahrgenommenes Phänomen passt zu meiner Wahrnehmung.
Das merkwürdige Leerzeichen nach der "date /t"-Ausgabe hatte ich ja auch schon angesprochen. Wenn das nun auch "nicht immer da ist", dann... na ja, sagen wir so: Kann auch sein, dass ich einen Tippfehler drin habe. Ich werde es noch mal prüfen.
Kann aber auch sein, das M$ einen klitzekleinen Flüchtigkeitsfehler übersehen haben könnte.

A propos Murks:
Ich würde auch gern nachbessern - an einer Stelle habe ich gepennt.
Die Werte s1159 und s2359, die bei Dir als "nicht gefunden" angemeckert wurden:
Fehlinterpretation von mir. Die existieren als REG_SZ, aber die sind {leer}.

Ich ändere deshalb die beiden Call:Blöcke unterhalb des eigentlichen Schnipsels wie folgt:

Lese ich jetzt einen "leeren" Registrywert, dann wird die old_xxx-Variable auch auf "" gesetzt.
Soll ein RegValue auf "leer" gesetzt werden, dann ist die Syntax des Reg.exe-Utilities auch weniger dubios, wenn der /d-Parameter ( /d=fülle mit Daten) ganz weggelassen wird.
Ich ziehe diese Änderung oben im Schnipsel nach.

Einen Nachtrag noch zu dem Time/t-Wert und ob der auch Sekunden anzeigen kann.
Vergiss es. Habe in meinen Akten nachgeschaut.
Der Time/t-Wert wird nur minütlich aktualisiert.
Also ist auf diesem Weg keine Sekunden-Information abgreifbar.

Grüße
Biber
Mitglied: DaSilva
DaSilva 28.06.2008 um 18:40:47 Uhr
Goto Top
Was mir gerade erst aufgefallen ist:
Die englische Zeit ist eine Stunde früher als die (richtige) deutsche
Zeit.
Eben wurde 15:41:41 und 2:41 PM angezeigt.
Wie kann ich das noch korrigieren?
Danke.
Heiß diskutierte Beiträge
question
Euro Zeichen geht nicht mehr gelöst GwaihirVor 1 TagFrageWindows 1014 Kommentare

Hallo zusammen, bei einem User geht das Euro-Zeichen nicht mehr. Er kann es nur noch über Copy&Paste aus der Zeichentabelle einfügen. Auch STRG+ALT+E klappt nicht. ...

question
Bitlockerpartition versehentlich gelöscht Läppi findet nach Partitiosformatierung mbr gpt die Partition nicht wiederPCChaosVor 1 TagFrageWindows 1011 Kommentare

Hallo zusammen, Ich habe ein riesen Problem, das mir sonst einfach erschien. Ich hatte eine Bitlocker Partition D: auf meinem C: Laufwerk installiert. Weil Windows ...

question
Mini PC lüfterlossurvial555Vor 1 TagFrageHardware8 Kommentare

Hallo zusammen, ich bin auf der Suche nach einer guten Lösung über System für staubintensive UmgebungenIch setzte zur Zeit 4 PCs in einem Lagerumfeld ein, ...

question
Online Kalender gesuchtStefanKittelVor 1 TagFrageInternet8 Kommentare

Hallo, ein Kunde von mir sucht einen Online-Kalender zur Raumreservierung. Keine Datenschutzrelevanten Informationen. Es geht um 3-4 Besprechungsräume in einem Gebäude wo mehrere Firmen sind. ...

info
(Gehäuse) Schutzklasse wie IP60 und was die Zahlen bedeutenSt-AndreasVor 1 TagInformationHardware4 Kommentare

Schutzklassen wie IP51 oder IP6X ließt man immer wieder mal, vor allem bei Gehäusen oder mobilen Geräten. Wenn man besondere Anforderungen an ein Gerät (staubdicht, ...

question
Nextcloud - out of syncRoadmaxVor 1 TagFrageCloud-Dienste3 Kommentare

Hallo Zusammen, wir betreiben eine eigene interne Nextcloud 15 Instanz auf einem Ubuntu 16.04 mit Apache und haben seit geraumer Zeit immer mehr Probleme. 1. ...

question
Netzwerkanmeldung auf ServermartenkVor 1 TagFrageWindows 1110 Kommentare

Hallo Gemeinschaft, habe einen Windows 11 Rechner, mit dem ich über VPN Scresoft ein Laufwerk von einem Server mappen möchte mit einem Windows 10 Rechner ...

question
Welchen Router, Board für Pfsense, OpenVPN? gelöst ROBCB19Vor 1 TagFrageRouter & Routing7 Kommentare

Hallo zusammen, ich suche Hardware für pfsense und Openvpn. Es sollten 10 VPN Verbindungen gleichzeitig möglich sein. Lese mich schon den 2ten Tag in die ...