getdate(3C) getdate(3C)
NAME
getdate - Datums- und Zeitangaben umwandeln
SYNTAX
#include <time.h>
struct tm *getdate(const char *string);
extern int getdateerr;
BESCHREIBUNG
getdate() wandelt benutzerdefinierbare Datums- und/oder Zeitangaben
aus string in eine tm-Struktur um. Die Strukturdeklaration befindet
sich in der Datei time.h [siehe auch ctime(3C)].
Zum Zerlegen und Interpretieren der Eingabezeichenkette werden benut-
zerdefinierte Schablonen verwendet. Diese Schablonen sind Textdateien,
welche der Benutzer anlegt; diese Textdateien werden über die Umge-
bungsvariable DATEMSK angegeben. Jede Zeile der Schablone stellt eine
akzeptierbare Datums- und/oder Zeitangabe dar; dabei werden einige der
Felddeskriptoren verwendet, die auch das Kommando date verwendet. Die
erste Zeile in der Schablone, die der Eingabespezifikation entspricht,
wird zur Interpretation und Umwandlung in das interne Zeitformat ver-
wendet. Ist die Operation erfolgreich, so liefert die Funktion
getdate() einen Zeiger auf eine Struktur vom Typ tm zurück; ansonsten
wird NULL zurückgegeben und die globale Variable getdateerr gesetzt.
Die folgenden Felddeskriptoren werden unterstützt:
%% entspricht %
%a abgekürzter Wochentagsname
%A ausgeschriebener Wochentagsname
%b abgekürzter Monatsname
%B ausgeschriebener Monatsname
%c lokale Datums- und Zeitdarstellung
%d Monatstag (01 - 31; die führende 0 ist optional)
%e entspricht %d
%D Datum als %m/%d/%y
%h abgekürzter Monatsname
%H Stunde (00 - 23)
%I Stunde (01 - 12)
%m Monatsnummer (01 - 12)
%M Minute (00 - 59)
%n entspricht \n
%p lokales Äquivalent zu AM oder PM
%r Zeit als %I:%M:%S %p
%R Zeit als %H:%M
%S Sekunde (00 - 59)
%t Tabulator einfügen
%T Zeit als %H:%M:%S
%w Wochentagsnummer (0 - 6; Sonntag = 0)
%x lokale Darstellung des Datums
%X lokale Darstellung der Uhrzeit
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
getdate(3C) getdate(3C)
%y Jahr mit Jahrhundert (00 - 99)
%Y Jahr als ccyy (z. B. 1986)
%Z Zeitzonenname oder keine Zeichen, wenn keine Zeitzone existiert.
Wenn die durch %Z gelieferte Zeitzone nicht der Zeitzone ent-
spricht, die getdate() erwartet, wird in einer Fehlermeldung auf
ungültige Eingabespezifikationen hingewiesen. Die Funktion
getdate() berechnet eine erwartete Zeitzone basierend auf Infor-
mationen, die der Funktion zur Verfügung gestellt wurden (wie
beispielsweise Stunde, Tag und Monat).
Bei dem von getdate() durchgeführten Abgleich zwischen der Schablone
und der Eingabespezifikation wird zwischen Groß- und Kleinschreibung
unterschieden.
Die Monats- und Wochentagsnamen können aus einer beliebigen Kombina-
tion von Klein- und Großbuchstaben bestehen. Der Benutzer kann bestim-
men, daß die Angabe der Eingabezeit oder des Eingabedatums sprachab-
hängig ist. Dies geschieht durch Setzen der Werte LCTIME und LCCTYPE
bei setlocale().
Führende Nullen sind für Deskriptoren, die diese zulassen, nicht
erforderlich. Für diese Deskriptoren sind jedoch höchsten zwei Ziffern
einschließlich der führenden Nullen zulässig. Zusätzliche Zwischen-
raumzeichen werden sowohl in der Schablonendatei als auch in string
ignoriert.
Die Felddeskriptoren %c, %x und %X werden nur unterstützt, wenn sie
nicht unterstützte Felddeskriptoren enthalten.
Die folgenden Regeln gelten für die Umwandlung von Eingabespezifika-
tionen in das interne Format:
- Wenn %Z gescannt wird, initialisiert getdate() die heruntergebro-
chene Zeit als aktuelle Zeit in der gescannten Zeitzone. Andern-
falls wird die heruntergebrochene Zeit basierend auf der aktuellen
lokalen Zeit initialisiert, so als wäre localtime() aufgerufen wor-
den.
- Ist nur der Wochentag gegeben, wird der aktuelle Tag angenommen,
wenn der angegebene Wochentag identisch mit dem aktuellen Tag ist.
Liegt der gegebene Tag vor dem aktuellen, wird der Wochentag aus
der nächsten Woche genommen.
- Ist nur der Monat angegeben, wird der aktuelle Monat angenommen,
wenn der angegebene Monat gleich dem aktuellen Monat ist. Liegt der
angegebene Monat vor dem aktuellen Monat, wird das nächste Jahr
angenommen, wenn ansonsten kein Jahr angegeben ist. (Der erste Tag
des Monats wird angenommen, wenn kein Tag angegeben ist).
- Wird keine Stunde, Minute und Sekunde angegeben, wird die aktuelle
Stunde, Minute und Sekunde übernommen.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
getdate(3C) getdate(3C)
- Wird kein Datum angegeben, wird der aktuelle Tag angenommen, wenn
die angegebene Stunde größer als die aktuelle Stunde ist. Ist die
angegebene Stunde kleiner als die aktuelle, so wird der nächste Tag
angenommen.
ERGEBNIS
Bei einem Fehler liefert getdate() den Wert NULL und setzt die Varia-
ble getdateerr, um den Fehler anzuzeigen.
Die möglichen Werte von getdateerr haben folgende Bedeutung.
1 Die Umgebungsvariable DATEMSK ist undefiniert oder Null.
2 Die Schablonendatei kann nicht zum Lesen geöffnet werden.
3 Der Dateistatus konnte nicht gelesen werden.
4 Die Schablonendatei ist keine reguläre Datei.
5 Ein Fehler trat beim Lesen der Schablonendatei auf.
6 malloc() konnte nicht erfolgreich ausgeführt werden, da zu wenig
Speicherplatz verfügbar war.
7 Es gibt keine Zeile aus der Schablonendatei, die der Eingabe ent-
spricht.
8 Das Eingabeformat ist ungültig (z. B. February 31).
BEISPIELE
Beispiel 1:
Das folgende Beispiel zeigt den möglichen Inhalt einer Schablone:
%m
%A %B %d %Y, %H:%M:%S
%A
%B
%m/%d/%y %I %p
%d,%m,%Y %H:%M
at %A the %dst of %B in %Y
run job at %I %p,%B %dnd
%A den %d. %B %Y %H.%M Uhr
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
getdate(3C) getdate(3C)
Beispiel 2:
Es folgen einige Beispiele für gültige Eingabespezifikationen für die
obigen Schablonen:
getdate("10/1/87 4 PM")
getdate("Friday")
getdate("Friday September 19 1987, 10:30:30")
getdate("24,9,1986 10:30")
getdate("at monday the 1st of december in 1986")
getdate("run job at 3 PM, december %2nd")
Wenn die Umgebungsvariable LANG auf german gesetzt wird, ist folgende
Angabe gültig:
getdate("Freitag den 10. Oktober 1986 10.30 Uhr")
Beispiel 3:
Lokale Zeit- und Datumsangaben werden ebenfalls unterstützt. Das fol-
gende Beispiel zeigt, wie lokale Datums- und Zeitangaben in Schablonen
definiert werden können.
Aufruf Zeile in Schablonendatei
getdate("11/27/86") %m/%d/%y
getdate("27.11.86") %d.%m.%y
getdate("86-11-27") %y-%m-%d
getdate("Friday 12:00:00") %A %H:%M:%S
Beispiel 4:
Die folgenden Beispiele verdeutlichen die obigen Regeln. Es wird ange-
nommen, daß das aktuelle Datum Montag, 22. September 12:19:47 EDT 1986
ist und die Umgebungsvariable LANG nicht eingestellt ist.
Zeile in
Eingabe Schablonendatei Datum
Mon %a Mon Sep 22 12:19:48 EDT 1986
Sun %a Sun Sep 28 12:19:49 EDT 1986
Fri %a Fri Sep 26 12:19:49 EDT 1986
September %B Mon Sep 1:19:49 EDT 1986
January %B Thu Jan 1:19:49 EST 1987
December %B Mon Dec 1:19:49 EST 1986
Sep Mon %b %a Mon Sep 1:19:50 EDT 1986
Jan Fri %b %a Fri Jan 2 12:19:50 EST 1987
Dec Mon %b %a Mon Dec 1:19:50 EST 1986
Jan Wed 1989 %b %a %Y Wed Jan 4 12:19:51 EST 1989
Fri 9 %a %H Fri Sep 26 09:00:00 EDT 1986
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
getdate(3C) getdate(3C)
Feb 10:30 %b %H:%S Sun Feb 1 10:00:30 EST 1987
10:30 %H:%M Tue Sep 23 10:30:00 EDT 1986
13:30 %H:%M Mon Sep 22 13:30:00 EDT 1986
HINWEISE
Nachfolgende Aufrufe von getdate() ändern den Inhalt von getdateerr.
Daten vor 1970 und nach 2037 sind ungültig.
getdate() macht ausdrücklichen Gebrauch von den in ctype(3C) definier-
ten Makros.
DATEIEN
/usr/lib/locale/locale/LCTIME
sprachabhängige druckbare Dateien
/usr/lib/locale/locale/LCCTYPE
zeichensatzabhängige druckbare Dateien
SIEHE AUCH
ctype(3C), setlocale(3C), environ(5), time(5).
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98