Subroutine getdate

Zweck

Datum und Uhrzeit im Benutzerformat konvertieren.

Bibliothek

C-Standardbibliothek (libc.a)

Syntax

#include <time.h>

struct tm *getdate (const char *string)
extern int getdate_err

Beschreibung

Die Subroutine getdate konvertiert benutzerdefinierte Datums-und/oder Zeitspezifikationen, auf die durch Zeichenfolgeverwiesen wird, in eine struct tm. Die Strukturdeklaration befindet sich in der Headerdatei time.h (siehe Subroutine ctime ).

Benutzerdefinierte Vorlagen werden verwendet, um die Eingabezeichenfolge zu analysieren und zu interpretieren. Die Vorlagen sind in Textdateien enthalten, die vom Benutzer erstellt und durch die Umgebungsvariable DATEMSangegeben werden. Die Variable DATEMSK sollte gesetzt werden, um den vollständigen Pfadnamen der Datei anzugeben, die die Vorlagen enthält. Die erste Zeile in der Vorlage, die der Eingabespezifikation entspricht, wird für die Interpretation und den Dialog im internen Zeitformat verwendet.

Die Vorlagen sollten einem Format folgen, in dem komplexen Felddeskriptoren einfachere Deskriptoren vorausgehen. Beispiel:

%M
%H:%M
%m/%d/%y
%m/%d/%y %H:%M:%S

Die folgenden Felddeskriptoren werden unterstützt:

Element Beschreibung
%% Identisch mit%.
%a Abgekürzter Name des Wochentags.
%A Vollständiger Name des Wochentags.
%b Abgekürzter Monatsname.
%B Vollständiger Monatsname.
%c Die entsprechende Datums-und Zeitdarstellung der Ländereinstellung.
%C Jahrhundertanzahl (00-99; führende Nullen sind zulässig, aber nicht erforderlich)
%d Tag des Monats (01-31: Die führende Null ist optional.
%e Identisch mit %d.
%D Datum im Format %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 Die Ländereinstellung entspricht entweder AM oder PM.
%r Zeit als %I: %M: %S %p
%r Zeit als %H: %M
%S Sekunden (00-61) Leap-Sekunden sind zulässig, aber durch die Verwendung von Algorithmen nicht vorhersehbar.
%t Identisch mit Registerkarte.
%T Zeit als %H: %M: %S
%w Zahl Wochentag (Sonntag = 0-6)
%x Die entsprechende Datumsdarstellung der Ländereinstellung.
%X Die entsprechende Zeitdarstellung der Ländereinstellung.
%y Jahr im Jahrhundert.
Hinweis: Wenn die Umgebungsvariable XPG_TIME_FMT=ON, ist %y das Jahr innerhalb des Jahrhunderts. Wenn ein Jahrhundert nicht anderweitig angegeben ist, beziehen sich Werte im Bereich 69-99 auf Jahre im 20. Jahrhundert (1969 bis einschließlich 1999); Werte im Bereich 00-68 beziehen sich auf 2000 bis einschließlich 2068.
%Y Jahr als ccyy (wie 1986)
%Z Zeitzonenname oder keine Zeichen, wenn keine Zeitzone vorhanden ist. Wenn die von %Z angegebene Zeitzone nicht mit der Zeitzone übereinstimmt, die die Subroutine getdate erwartet, tritt ein Fehler aufgrund einer ungültigen Eingabespezifikation auf. Die Subroutine getdate berechnet eine erwartete Zeitzone auf der Basis von Informationen, die an die Schnittstelle übergeben wurden (z. B. Stunde, Tag und Monat).

Bei der Übereinstimmung zwischen der Schablone und der Eingabespezifikation, die von der Subroutine getdate ausgeführt wird, muss die Groß-/Kleinschreibung beachtet werden.

Die Namen von Monaten und Wochentagen können aus einer beliebigen Kombination von Groß-und Kleinbuchstaben bestehen. Der verwendete kann anfordern, dass die Angabe von Eingabedatum oder -zeit in einer bestimmten Sprache erfolgt, indem die Kategorie LC_TIME festgelegt wird (siehe Subroutine setlocale ).

Führende Nullen sind für Deskriptoren, die führende Nullen zulassen, nicht erforderlich. Für diese Deskriptoren sind jedoch höchstens zwei Ziffern zulässig, einschließlich führender Nullen. Zusätzliche Leerzeichen in der Schablonendatei oder in Zeichenfolge werden ignoriert.

Die Felddeskriptoren %c, %xund %X werden nicht unterstützt, wenn sie nicht unterstützte Felddeskriptoren enthalten.

Beispiel 1 ist ein Beispiel für eine Vorlage. Beispiel 2 enthält gültige Eingabespezifikationen für die Vorlage. Beispiel 3 zeigt, wie lokale Datums-und Zeitspezifikationen in der Vorlage definiert werden können.

Die folgenden Regeln gelten für die Konvertierung der Eingabespezifikation in das interne Format:

  • Wenn nur der Wochentag angegeben ist, wird heute angenommen, wenn der angegebene Monat dem aktuellen Tag entspricht, und die nächste Woche, wenn er kleiner ist.
  • Wenn nur der Monat angegeben wird, wird der aktuelle Monat angenommen, wenn der angegebene Monat dem aktuellen Monat entspricht und das nächste Jahr, wenn es kleiner ist und kein Jahr angegeben ist (der erste Tag des Monats wird angenommen, wenn kein Tag angegeben ist).
  • Wenn keine Stunde, Minute und Sekunde angegeben werden, wird die aktuelle Stunde, Minute und Sekunde angenommen.
  • Wenn kein Datum angegeben ist, wird heute angenommen, wenn die angegebene Stunde größer als die aktuelle Stunde ist, und morgen angenommen, wenn sie kleiner ist.

Rückgabewerte

Nach erfolgreicher Beendigung gibt die Subroutine getdate einen Zeiger auf struct tm zurück; andernfalls gibt sie einen Nullzeiger zurück und die externe Variable getdate_err wird auf den Fehler gesetzt.

Fehlercodes

Bei einem Fehler wird ein Nullzeiger zurückgegeben und die Variable getdate_err wird auf den Fehler gesetzt.

Es folgt eine vollständige Liste der getdate_err -Einstellungen und der zugehörigen Beschreibungen:

Element Beschreibung
1 Die Umgebungsvariable DATEMSK ist null oder nicht definiert.
2. Die Vorlagendatei kann nicht zum Lesen geöffnet werden.
3 Dateistatusinformationen konnten nicht abgerufen werden.
4 Die Schablonendatei ist keine reguläre Datei.
5 Beim Lesen der Schablonendatei ist ein Fehler aufgetreten.
6 Speicherzuordnung fehlgeschlagen (nicht genügend Speicher verfügbar.
7 Die Vorlage enthält keine Zeile, die der Eingabe entspricht.
8 Ungültige Eingabespezifikation. Beispiel: 31. Februar oder es wurde eine Zeit angegeben, die nicht in einem time_t dargestellt werden kann (die Zeit in Sekunden seit 00:00:00 UTC, 1. Januar 1970).

Beispiele

  1. Das folgende Beispiel zeigt den möglichen Inhalt einer Vorlage:
    %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
  2. Im Folgenden finden Sie Beispiele für gültige Eingabespezifikationen für die Vorlage in Beispiel 1:
    getdate ("10/1/87 4 PM")
    getdate ("Friday")
    getdate ("Friday September 18, 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 Kategorie LC_TIME auf eine deutsche Ländereinstellung gesetzt ist, diefreitagals Wochentagsname undoktoberAls Monatsname wäre Folgendes gültig:
    getdate ("freitag den 10. oktober 1986 10.30 Uhr")
  3. Die folgenden Beispiele zeigen, wie die lokale Datums-und Zeitspezifikation in der Vorlage definiert werden kann.
    Aufrufen Position in Vorlage
    getdate ("27.11.86") %m/%d/%y
    getdate ("27.11.86" 0 %d. %m. %y
    getdate ("86-11-27") %y-%m-%d
    getdate ("Freitag 12:00:00") %A %H: %M: %S
  4. Die folgenden Beispiele veranschaulichen die obigen Regeln unter der Annahme, dass das aktuelle Datum Mon Sep 22 12:19:47 EDT 1986 und die Kategorie LC_TIME auf die Standardländereinstellung "C" gesetzt ist.
    Eingabe Position in Vorlage Datum
    Mon %a Mo Sep 22 12:19:47 EDT 1986
    Son %a So Sep 28 12:19:47 EDT 1986
    Fr %a Fr 26. Sep. 12:19:47 EDT 1986
    September %B Mo Sep1 12:19:47 EDT 1986
    Januar %B Do Jan 1 12:19:47 EDT 1986
    Dezember %B Mo Dez 1 12:19:47 EDT 1986
    Sep-mon %b %a Mo Sep 1 12:19:47 EDT 1986
    Jan Fr %b %a Fr 2. Januar 12:19:47 EDT 1986
    Dez-mon %b %a Mo Dez 1 12:19:47 EDT 1986
    Jan Mi 1989 %b %a %Y Mi 4 Jan 12:19:47 EDT 1986
    Fr 9 %a %H Fr 26. Sep. 12:19:47 EDT 1986
    Februar 10:30 %b %H: %S So Feb 1 12:19:47 EDT 1986
    10:30 %H: %M Di Sep 23 12:19:47 EDT 1986
    13:30 %H: %M Mo Sep 22 12:19:47 EDT 1986