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

Last change on this file since 396 was 241, checked in by ansari, 26 years ago

ppersist + pexc

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