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_errBeschreibung
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:%SDie 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
- 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 - Im Folgenden finden Sie Beispiele für gültige Eingabespezifikationen für die Vorlage in Beispiel 1:
Wenn die Kategorie LC_TIME auf eine deutsche Ländereinstellung gesetzt ist, diefreitagals Wochentagsname undoktoberAls Monatsname wäre Folgendes gültig: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")getdate ("freitag den 10. oktober 1986 10.30 Uhr") - 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 - 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