Mittwoch, 22. Oktober 2008

Beliebig formatierte Datum-/Zeitstempel / Free formatted date- and timestamps

Immer wieder besteht der Bedarf, einen Dateinamen mit einem Datum- und/oder Zeitstempel zu versehen. Da der Aufbau jedoch jedes Mal anders aussieht, und alles (wie so oft) schnell gehen muss, sammeln sich im Laufe der Zeit die verschiedensten Funktionen an um den Dateinamen aufzubereiten. Um dieses Sammelsorium ein klein wenig zu entschlacken gibt es in diesem Blogeintrag einen Mustercode für eine zentrale Formatierung die letztlich nur einen Parameter benötigt, nämlich das Formatmuster.

Zulässige Formatierungskennungen sind YYYY bzw. YY für Jahr, MM für Monat, DD für Tag, hh für Stunde, mm für Minute, ss für Sekunde. Wird bspw. als Format die folgende Zeichenkette übergeben: Invoice-Spar-DD.MM.YYYY.edi wird daraus: Invoice-Spar-22.10.2008.edi

Die Zeichenkette: Invoice-Spar-YYYY.MM.DD_hh.mm.ss.edi wird zu: Invoice-Spar-2005.10.22_07.45.56.edi

Hier nun der Code:

FUNCTION FormatDTStamp
LPARAMETERS vFormat as String

    LOCAL   lcJahr as String, lcMonat as String, lcTag as String, ;
            lcStunde as String, lcMinute as String, lcSekunde as String, ;
            lcStamp as String
         
    lcJahr      = PADL(YEAR(DATE()),4,[0])
    lcMonat     = PADL(MONTH(DATE()),2,[0])
    lcTag       = PADL(DAY(DATE()),2,[0])
    lcStunde    = PADL(HOUR(DATETIME()),2,[0])
    lcMinute    = PADL(MINUTE(DATETIME()),2,[0])
    lcSekunde   = PADL(SEC(DATETIME()),2,[0])
    lcStamp     = m.vFormat

    DO CASE
    CASE OCCURS([YYYY],lcStamp) > 0
        lcStamp = STRTRAN(lcStamp,[YYYY],lcJahr)
    CASE OCCURS([YY],lcStamp) > 0
        lcStamp = STRTRAN(lcStamp,[YY],RIGHT(lcJahr,2))
    ENDCASE

    lcStamp = STRTRAN(lcStamp,[MM],lcMonat)
    lcStamp = STRTRAN(lcStamp,[DD],lcTag)
    lcStamp = STRTRAN(lcStamp,[hh],lcStunde)
    lcStamp = STRTRAN(lcStamp,[mm],lcMinute)
    lcStamp = STRTRAN(lcStamp,[ss],lcSekunde)

    RETURN lcStamp

ENDFUNC

Die Funktion kann um beliebige weitere Platzhalter ergänzt werden. Denkbar wäre eine textuelle Darstellung von Monat und Tag durch eine dreistellige Platzhalterdefinition (Jan,Feb,Mär,... -> MMM bzw. Mon,Die,Mit,... -> DDD).

Eine solche Umsetzung unterstützt VFP mit den beiden Funktionen CMONTH() und CDOW().

Keine Kommentare:

Kommentar veröffentlichen