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

Last change on this file since 3870 was 2808, checked in by ansari, 20 years ago

MAJ documentation - Reza 14/6/2005

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