corner image
home ·C++ in Raum und Zeit


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

1.Die Datum/Zeitfunktionen

2.Juliansches Datum


1. Die Datum/Zeitfunktionen

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. Juliansches Datum

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
  ©2016· Claus Ebert · Emailemail senden