Showdate

Windows-Programm Showdate

Einleitung

Das Tool SHOWDATE wurde geschrieben, um das Datum beliebig formatiert ausgeben zu können, z.B. Tag-Monat-Jahr oder aber auch Jahr (zweistellig)-Monat-Tag. Weiterhin kann das zurückgelieferte Datum um eine Anzahl Tage, Stunden und Minuten verschoben werden.

Diese Funktionalität hatte ich in einer Bat-Datei gebraucht, als ich Logfiles, die einen Zeitstempel im Namen enthielten, archivieren wollte. Es wurde täglich ein Task aufgerufen, der das Logfile von vor 45 Tagen griff und in ein Zip-Archiv logs_[Jahr]_[Monat] verschoben hat.

Syntax

SHOWDATE.exe [Optionen]

Ausgabe-Optionen:
  /f:Zeitformat - String zur Formatierung des Rückgabewertes
  /p:Prefix - Statischer Text, der vor dem Ausgabetext ausgegeben wird
  /s:Suffix - Statischer Text, der nach dem Ausgabetext ausgegeben wird

Optionen zur Zeitverschiebung:
  /d:Anzahl Tage
  /hh:Anzahl Stunden
  /mm:Anzahl Minuten
  negative Werte ermitteln ein Datum in der Vergangenheit

Ohne Optionen wird das aktuelle Datum im Format dd.mm.yyyy ausgegeben.


Beim Formatierungsstring des Parameters /f können folgende Zeichen verwendet werden (Copy & Paste aus der Borland-Hilfe ... Sie finden diese Auflistung auch noch einmal in der beiliegenden Readme):

Specifier  Displays

c          Displays the date using the format given by the ShortDateFormat
           global variable, followed by the time using the format given by the
           LongTimeFormat global variable. The time is not displayed if
           the date-time value indicates midnight precisely.
d          Displays the day as a number without a leading zero (1-31).
dd         Displays the day as a number with a leading zero (01-31).
ddd        Displays the day as an abbreviation (Sun-Sat) using the strings
           given by the ShortDayNames global variable.
dddd       Displays the day as a full name (Sunday-Saturday) using the strings
           given by the LongDayNames global variable.
ddddd      Displays the date using the format given by the ShortDateFormat
           global variable.
dddddd     Displays the date using the format given by the LongDateFormat
           global variable.
e          Displays the year in the current period/era as a number without a
           leading zero (Japanese, Korean and Taiwanese locales only).
ee         Displays the year in the current period/era as a number with a
           leading zero (Japanese, Korean and Taiwanese locales only).
g          Displays the period/era as an abbreviation (Japanese and Taiwanese
           locales only).
gg         Displays the period/era as a full name. (Japanese and Taiwanese
           locales only).
m          Displays the month as a number without a leading zero (1-12). If the
           m specifier immediately follows an h or hh specifier, the minute
           rather than the month is displayed.
mm         Displays the month as a number with a leading zero (01-12). If the
           mm specifier immediately follows an h or hh specifier, the minute
           rather than the month is displayed.
mmm        Displays the month as an abbreviation (Jan-Dec) using the strings
           given by the ShortMonthNames global variable.
mmmm       Displays the month as a full name (January-December) using the
           strings given by the LongMonthNames global variable.
yy         Displays the year as a two-digit number (00-99).
yyyy       Displays the year as a four-digit number (0000-9999).
h          Displays the hour without a leading zero (0-23).
hh         Displays the hour with a leading zero (00-23).
n          Displays the minute without a leading zero (0-59).
nn         Displays the minute with a leading zero (00-59).
s          Displays the second without a leading zero (0-59).
ss         Displays the second with a leading zero (00-59).
z          Displays the millisecond without a leading zero (0-999).
zzz        Displays the millisecond with a leading zero (000-999).
t          Displays the time using the format given by the ShortTimeFormat
           global variable.
tt         Displays the time using the format given by the LongTimeFormat
           global variable.
am/pm      Uses the 12-hour clock for the preceding h or hh specifier, and
           displays 'am' for any hour before noon, and 'pm' for any hour after
           noon. The am/pm specifier can use lower, upper, or mixed case, and
           the result is displayed accordingly.
a/p        Uses the 12-hour clock for the preceding h or hh specifier, and
           displays 'a' for any hour before noon, and 'p' for any hour after
           noon. The a/p specifier can use lower, upper, or mixed case, and the
           result is displayed accordingly.
ampm       Uses the 12-hour clock for the preceding h or hh specifier, and
           displays the contents of the TimeAMString global variable for any
           hour before noon, and the contents of the TimePMString global
           variable for any hour after noon.
/          Displays the date separator character given by the DateSeparator
           global variable.
:          Displays the time separator character given by the TimeSeparator
           global variable.
'xx'/"xx"  Characters enclosed in single or double quotes are displayed as-is,
           and do not affect formatting.

Anforderungen

SHOWDATE ist ein Kommandozeilen-programm und läuft nur unter Windows (nicht unter DOS).

  • mind. Windows 4.X (Windows 95/ 98/ NT)

Dieses Programm ist FREEWARE. Es kann privat und kommerziell kostenlos eingesetzt werden. Die Weitergabe ist erwünscht, aber nur samt der showdate_readme.txt gestattet.
Trotz ausführlicher Tests der Software übernimmt der Autor keinerlei Haftung für entstandene Schäden durch die Verwendung dieser Software. Der Autor kann desweiteren keine Garantie dafür übernehmen, dass die Anwendung auf allen Systemen gleichermassen zuverlässig funktioniert. Die Verwendung des Programmes erfolgt ausschliesslich auf eigene Gefahr!

Download:

showdate.zip (30 kB)

In der Download-Datei sind enthalten:

  • eine ausführbare Datei: SHOWDATE.EXE
  • eine README

Beispiele

Der Aufruf von Showdate ist nicht sonderlich spektakulär - eher langweilig ;-)
Daher ein paar Beispiele, was sich damit anfangen lässt:

Ausgabe des aktuellen Datums:

showdate /f:"dd.mm.yyyy"


Ausgabe des aktuellen Datums + Uhrzeit:

showdate /f:"dd.mm.yyyy - hh:mm:ss"


aktuelles Datum mit Monat-Tag-Jahr 2-stelig und Uhrzeit im 12h-Format:

showdate /f:"mm-dd-yy hh:mm am/pm"


Wochentag von gestern:

showdate /f:"dddd" /d:-1



Logfiles schreiben
Meldungstexte lassen sich in Logfiles mit Datumsangabe versehen:

    2003-11-08 10:50:03 - Skript .... gestartet
    2003-11-08 10:50:04 - starte
Auszug aus Log-Datei


... und so kann es gemacht werden:

set df=yyyy-mm-dd hh:mm:ss  
set logfile="c:\meinlogfile.log"  
showdate /f:"%df%" /s:" - Skript %0 gestartet" >>%logfile%  

Backup:
Man kann monatliche Backups in Dateien anlegen, die den Zeitstempel mit Jahr und Monat beinhalten. Ein Kompressiossionstool, das mit Parametern umgehen kann. Die Kommandozeilentools von ACE und RAR können dies. Ich habe hier als Beispiel Zip 2.1.

So sichert man z.B. den Ordner "C:\webseite\" in ein Monatsarchiv "D:\meinbackup_200311.zip":

set tmpbat="%temp%\~tmpbat.bat"  
showdate /f:"yyyy_mm" /p:"set TargetFile=D:\meinbackup_"> %tmpbat%  
call %tmpbat%  
del %tmpbat%  
set TargetFile=%TargetFile%.zip  
   
zip -u -r %TargetFile% "C:\webseite\"  

Backup von Logfiles:
Tools, die Logfiles schreiben, legen die Logfiles häufig mit einem Zeitstempel ab. Der IIS z.B. in der Form ex031108.log (für den 8. November 2003).
Mit Hilfe des Parameters /d von showdate kann man ein Datum eines anderen Tages ausgeben lassen. Bei einem negativen Wert werden tage zurückgezählt.

So archiviert man ein 45 Tage altes Logfile d:\weblogs\ex[Zeitstempel].log nach d:\weblogs\archiv_[Jahr_Monat].zip:

set tmpbat="%temp%\~tmpbat.bat"  
showdate /f:"yymmdd"  /d:-45 /p:"set SourceFile=ex" /s:".log" > %tmpbat%  
showdate /f:"yyyy_mm" /d:-45 /p:"set TargetFile=archiv_" /s:".zip" >> %tmpbat%  
call %tmpbat%  
del %tmpbat%  
   
d:  
cd weblogs  
zip -m -9 %TargetFile% %SourceFile%  

Anm.:
zip -m verschiebt das File ins Zip-Archiv (man könnte %SourceFile% auch nachträglich löschen); -9 ist die Kompressionsrate.