letzte Änderung:
TCP-States
Netzwerk
Links
Australien
Wertpapiere
|
C++ in Raum und Zeit
Von Claus Ebert
Version 0.10
Die Zeit/Datums-Funktionen sind im hinblick auf Zeitzonen und usw. nicht einfach zu verstehen ... also schau mer mal (um einen Berühmten Zeitgenossen zu zitieren) Ausserdem alles was ich sonst noch so zu diesem Thema bieten kann
Die Zeitschnittstelle von Unix
1.1 Übersichtsdiagramm
double
^
difftime() |
|
-- time() --> time_t <-------- mktime() --------- struct tm
| -- localtime(), gmtime() --> |
ctime() | | asctime()
| | strftime()
| |
-------------> char* <-------------
top
1.2 Die Zeitfunktionen
Funktion
|
Beschreibung
|
time_t
|
Definition eines ziemlich grossen integer, der immer GMT ist. (Sekunden seit dem 1.1 1970)
|
time_t time(time_t *tp)
|
Liefert die aktuelle Systemzeit. Falls tp != NULL wird das Ergebnis zusätzlich in *tp abgelegt.
|
struct tm *localtime(const time_t *tp)
|
Berechnet den der Zeit *tp entsprecheden Ortszeitrecord und liefert einen Zeiger darauf.
|
struct tm *gmtime(const time_t *tp)
|
Berechnet den dem Zeitpunkt *tp ensprechenden Weltzeitrecord und liefert einen Zeiger darauf.
|
time_t mktime(struct tm *tmptr)
|
Liefert die dem Ortszeitrecord *tmptr entsprechende Zeit. (Die Komp. tm_wday und tm_yday werden ignoriert
Die anderen Komponenten brauchen nicht im eingeschränkten Bereich zu liegen.
Falls tm_isdst< 0 wird zu bestimmen versucht, ob Sommerzeit gilt. Andernfalls wird das aus dem
Zahlenwert geschlossen. Bei Fehlern Rückgabewert -1 )
|
double difftime(time_t t2, time_t t1)
|
Liefert die Zeitdifferenz zwischen t2 und t1 in Sekunden.
|
char *asctime(const struct tm *tmptr)
|
Liefert zum Zeitrecord *tmptr eine Zeichenkette der Gestalt Sun Sep 16 01:03:52 1973\n
|
char *ctime(const time_t *tp)
|
Entspricht asctime(localtime(tp))
|
size_t strftime(char *s, size_t maxsize,
const char *format,
const struct tm *tmptr)
|
Erzeugt zum Zeitrecord *tmptr eine gem. a¡ format formatierte Zeichenkette,von der höchstens
maxsize Zeichen in s abgelegt werden.
%a
Wochentag (abgekürzt)
%b
Monat (abgekürzt)
%c
Zeit- und Datumsdarstellung
%d
Tag im Monat (01-31)
%H
Stunde (00-23)
%m
Monat (01-12)
%M
Minute (00-59)
%S
Sekunde (00-61)
%y
Jahr ohne Jahrhundert (00-99)
%Y
Jahr mit Jahrhundert
|
|
|
clock_t clock(void)
|
Liefert Rechnerkernzeit ab Programmstart. Zur Umrechung in Sekunden ist durch CLOCKS_PER_SEC zu dividieren.
|
top
2.1 Ein Datum in ein Juliansches Datum umrechnen
unsigned long getJulian(unsigned int l_year,
unsigned int l_month,
unsigned int l_day){
long jdn, y;
y=i_year;
if (y < 0)// adjust BC
y++;
jdn = (long)(i_day - 32076)
+ 1461L * (y + 4800L + (i_month - 14) / 12) / 4
+ 367 * (i_month - 2 - (i_month - 14) / 12 * 12) / 12
- 3 * ((y + 4900L + (i_month - 14) / 12) / 100) / 4
+ 1;
return jdn;
}
top
2.2 Ein Juliansches Datum in Tag,Monat,Jahr zurückrechnen
void splitJulian(unsigned long jdn, unsigned int& y,
unsigned int& m unsigned int& d ){
long x, z;
long daysPer400Years = 146097L;
long fudgedDaysPer4000Years = 1460970L + 31;
x = jdn + 68569L;
z = 4 * x / daysPer400Years;
x = x - (daysPer400Years * z + 3) / 4;
y = 4000 * (x + 1) / fudgedDaysPer4000Years;
x = x - 1461 * y / 4 + 31;
m = 80 * x / 2447;
d = x - 2447 * m / 80;
x = m / 11;
m = m + 2 - 12 * x;
y = 100 * (z - 49) + y + x;
if (y<= 0) // adjust BC years
y--;
}
top
|