1 Theorie | |
→ | 1.2 Häufig auftretende Problemstellungen |
Windows | |
Datum und Uhrzeit über C-Runtime-Library | |
Datum und Uhrzeit über Windows-API | |
Linux/Unix | |
Aufgaben |
Komponente | Bedeutung |
---|---|
tm_mday | Tag innerhalb des Monats, beginnend mit 1 |
tm_mon | Nummer des Monats, beginnend mit 0 für Januar |
tm_year | Jahr ab 1900 (also 117 für das Jahr 2017) |
tm_hour | Stunde |
tm_min | Minute |
tm_sec | Sekunde |
/** @file ex038.c Demo-Programm fuer Abfrage von Datum und Uhrzeit
auf Windows-Systemen.
*/
/* Copyright (C) 2014-2017 - HS Schmalkalden. All rights reserved. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
/** Hauptprogramm.
@return 0 bei Erfolg, alle anderen Werte weisen auf Fehler hin.
*/
int
main(void)
{
struct tm buffer; /* Aktuelle Zeit zerlegt in Teile */
__time64_t timer; /* Aktuelle Zeit als ein Wert */
int exc = EXIT_FAILURE; /* Exit-Status-Code */
/* Aktuelle Zeit ermitteln */
if ((__time64_t)(-1) == _time64(&timer)) {
/* !!! Holen der Uhrzeit ist fehlgeschlagen */
goto finished;
}
/* Zeit in Komponenten zerlegen */
if (0 != _localtime64_s(&buffer, &timer)) {
/* !!! Fehler aufgetreten beim Zerlegen der Zeit */
goto finished;
}
/* Datum und Uhrzeit ausgeben */
printf(
"Heute ist der %02d.%02d.%04d.\n",
buffer.tm_mday,
(1 + buffer.tm_mon),
(1900 + buffer.tm_year)
);
printf(
"Es ist %02d:%02d:%02d Uhr.\n",
buffer.tm_hour,
buffer.tm_min,
buffer.tm_sec
);
/* Erfolg vermerken */
exc = EXIT_SUCCESS;
finished:
exit(exc); return exc;
}
/* vim: set ai sw=4 ts=4 expandtab : */
Die Struktur SYSTEMTIME enthält die Komponenten wYear, wMonth, wDay, wDay, wDayOfWeek, wHour, wMinute, wSecond und wMilliseconds. Mit der Funktion
void WINAPI GetLocalTime(SYSTEMTIME *lpSystemTime);
wird die Struktur auf das aktuelle Datum gesetzt, siehe Beispiel.
/* Testprogramm zur Demonstation von Datum/Uhrzeit-Abfrage unter Windows
*/
/* Copyright (C) 2015-2017 - HS Schmalkalden. All rights reserved. */
#include <windows.h>
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int
main(int argc, char *argv[])
{
SYSTEMTIME st;
GetLocalTime(&st);
printf(
"%02d.%02d.%04d %02d:%02d:%02d.%03d\n",
st.wDay,
st.wMonth,
st.wYear,
st.wHour,
st.wMinute,
st.wSecond,
st.wMilliseconds
);
return 0;
}
/* vim: set ai sw=4 ts=4 expandtab : */
/** @file ex037.c Demo-Programm fuer Abfrage von Datum und Uhrzeit
auf POSIX-Systemen.
*/
/* Copyright (C) 2014-2017 - HS Schmalkalden. All rights reserved. */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/** Hauptprogramm.
@return 0 bei Erfolg, alle anderen Werte weisen auf Fehler hin.
*/
int
main(void)
{
struct tm buffer; /* Aktuelle Zeit zerlegt in Teile */
struct tm *tptr; /* Ergebnis von localtime_r */
time_t timer; /* Aktuelle Zeit als ein Wert */
int exc = EXIT_FAILURE; /* Exit-Status-Code */
/* Aktuelle Zeit ermitteln */
if ((time_t)(-1) == time(&timer)) {
/* !!! Holen der Uhrzeit ist fehlgeschlagen */
goto finished;
}
/* Zeit in Komponenten zerlegen */
tptr = localtime_r(&timer, &buffer);
if (NULL == tptr) {
/* !!! Fehler aufgetreten beim Zerlegen der Zeit */
goto finished;
}
/* Datum und Uhrzeit ausgeben */
printf(
"Heute ist der %02d.%02d.%04d.\n",
tptr->tm_mday,
(1 + tptr->tm_mon),
(1900 + tptr->tm_year)
);
printf(
"Es ist %02d:%02d:%02d Uhr.\n",
tptr->tm_hour,
tptr->tm_min,
tptr->tm_sec
);
/* Erfolg vermerken */
exc = EXIT_SUCCESS;
finished:
exit(exc); return exc;
}
/* vim: set ai sw=4 ts=4 expandtab : */