source: Sophya/trunk/SophyaLib/NTools/dates.h@ 2322

Last change on this file since 2322 was 2322, checked in by cmv, 23 years ago
  • passage xxstream.h en xxstream
  • compile avec gcc_3.2, gcc_2.96 et cxx En 3.2 le seek from ::end semble marcher (voir Eval/COS/pbseekios.cc)

rz+cmv 11/2/2003

File size: 4.4 KB
Line 
1// Gestion de dates
2// E. Aubourg 1995-2000
3// DAPNIA/SPP (Saclay) / CEA LAL - IN2P3/CNRS (Orsay)
4
5#ifndef DATES_SEEN
6#define DATES_SEEN
7
8#include <string.h>
9#include <string>
10#include <iostream>
11#include "pexceptions.h"
12
13// namespace SOPHYA {
14
15class TimeZone;
16// <summary> Dates, conversions, operations </summary>
17// Classe generale de date et heure, operation, TU/TL ...
18class Date {
19public:
20 // Enumerations jours et mois
21 // <group>
22 enum Jour {jour_Lundi=0, jour_Mardi, jour_Mercredi, jour_Jeudi, jour_Vendredi, jour_Samedi, jour_Dimanche};
23 enum Mois {mois_Janvier=1, mois_Fevrier, mois_Mars, mois_Avril, mois_Mai, mois_Juin, mois_Juillet,
24 mois_Aout, mois_Septembre, mois_Octobre, mois_Novembre, mois_Decembre};
25 enum {kGMTTime=0, kLocalTime=1};
26 // </group>
27
28 // Constructeur : maintenant
29 Date();
30 // Constructeur : jours ecoules depuis 0/1/1901 0h TU
31 Date(double);
32 // Constructeur : "jj/mm/aa" ou "amjj", "hh:mm:ss"
33 // topt : kGMTTime (par defaut) ou kLocalTime
34 // <group>
35 Date(const char*, const char* = 0, int topt=0);
36 Date(string const&, string const& = "", int topt=0);
37 // </group>
38 // Constructeur : Jour Mois An, Heure Minutes Secondes
39 Date(int J, int M, int A, int h, int m, double s);
40
41 /*operator double() const;*/
42 // Jours depuis le 0 janvier 1901 0h TU
43 double GetDays() const;
44 // Jours depuis le 0 janvier 1901 0h TU
45 void Set(double);
46 // "jj/mm/aa" ou "amjj", "hh:mm:ss"
47 // <group>
48 void Set(const char*, const char* = 0, int topt=0);
49 void Set(string const&, string const& = "", int topt=0);
50 // </group>
51
52 // Change de zone horaire.
53 void SetTimeZone(TimeZone* tz);
54
55 // Verifie si des parties de la date sont indeterminees
56 // <group>
57 // Date partiellement indeterminee
58 bool UndetDate() const;
59 // Date totalement indeterminee
60 bool AllUndetDate() const;
61 // Heure partiellement indeterminee
62 bool UndetTime() const;
63 // Heure totalement indeterminee
64 bool AllUndetTime() const;
65 // </group>
66
67 // Conversion vers des chaines de caractere,
68 // date en clair ou code Eros, heure, et temps sideral
69 // en heure local ou GMT.
70 // <group>
71 void GetDateStr(char*, int tOpt=0) const;
72 void GetDateCode(char*, int tOpt=0) const;
73 void GetTimeStr(char*, int tOpt=0) const;
74 void GetSidTStr(char*) const;
75
76 string DateStr(int tOpt=0) const;
77 string DateCode(int tOpt=0) const;
78 string TimeStr(int tOpt=0) const;
79 string SidTStr() const;
80 // </group>
81
82 // Jour de la semaine, jour_Lundi == 0
83 int DayOfWeek(int tOpt=0) const;
84
85 // Ajoute ou soustrait un intervalle en jour et fraction de jour
86 // <group>
87 Date& operator += (double);
88 Date& operator -= (double);
89
90 friend Date operator + (Date const&, double);
91 friend Date operator - (Date const&, double);
92 // </group>
93
94 // Nombre de jour (et fraction) entre deux dates
95 friend double operator - (Date const&, Date const&);
96
97 // Comparaisons entre dates
98 // <group>
99 friend bool operator == (Date const&, Date const&);
100 friend bool operator < (Date const&, Date const&);
101 friend bool operator <= (Date const&, Date const&);
102 friend bool operator > (Date const&, Date const&);
103 friend bool operator >= (Date const&, Date const&);
104 friend bool operator != (Date const&, Date const&);
105 // </group>
106
107 // Impression
108 friend ostream& operator << (ostream&, Date const&);
109
110 // Nombre de jours dans le mois
111 static short MonthDays(short mois, short annee);
112
113 // Nombre de jours dans l'annee
114 static short YearDays(short annee);
115
116 // Ieme jourssem dans le mois
117 // (2, jour_Dimanche, 5, 1996) : deuxieme dimanche de mai 96
118 static short NthMonthDay(short i, short joursem, short mois, short annee);
119
120 short JJ,MM,AA,hh,mm;
121 double ss;
122 TimeZone* timeZone;
123 int nuit; // est-ce une date midi-midi ?
124
125/* void GetSysTimeZone(); */
126};
127
128// <summary> Gestion des fuseaux horaires </summary>
129// Classe de gestion des fuseaux horaires. Tient compte des heures d'ete.
130class TimeZone {
131public:
132 char code[4];
133 char name[20];
134
135 short gmtOffset;
136
137 short hasDST;
138 short dstByWeekDay;
139 short dstStartDay, dstStartNum, dstStartMonth; // -1 : le dernier, dstStartDay : apres cette date
140 short dstStopDay, dstStopNum, dstStopMonth;
141 short dstOffset;
142
143 TimeZone(); // Tente de deviner le timezone systeme
144 TimeZone(const char*); // Par nom
145 void SetZone(const char*);
146 int IsDst(Date const& date);
147 int GetOffset(Date const& date);
148};
149
150extern TimeZone* gTimeZone;
151
152// } namespace SOPHYA
153
154#endif
Note: See TracBrowser for help on using the repository browser.