Changeset 2808 in Sophya for trunk/SophyaLib/NTools/dates.cc


Ignore:
Timestamp:
Jun 14, 2005, 1:25:05 PM (20 years ago)
Author:
ansari
Message:

MAJ documentation - Reza 14/6/2005

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/NTools/dates.cc

    r2615 r2808  
    1111#include "dates.h"
    1212
    13 //++
    14 // Class        TimeZone
    15 // Lib          Outils++
    16 // include      dates.h
    17 //
    18 //      Classe de fuseau horaire. Permet les conversion
    19 //      GMT <-> temps local, en gérant les changements
    20 //      d'heure hiver-été.
    21 //      Deux fuseaux horaires sont prédéfinis, "France"
    22 //      et "Chili".
    23 //--
     13/*!
     14  \class TimeZone
     15  \ingroup NTools
     16  Management of time zones - This class is used with class Date.
     17  \warning Unless necessary, DO NOT USE this class.
     18  \sa SOPHYA::TimeStamp
     19
     20  \verbatim
     21 
     22  Classe de fuseau horaire. Permet les conversion
     23  GMT <-> temps local, en gérant les changements
     24  d'heure hiver-été.
     25  Deux fuseaux horaires sont prédéfinis, "France"
     26  et "Chili".
     27  \endverbatim
     28*/
    2429
    2530TimeZone* gTimeZone = NULL;
    2631
    27 //++
    28 // Titre        Constructeurs
    29 //--
    30 
    31 //++
     32
     33/*!     
     34  Constructeur par défaut. Il lit la variable
     35  d'environnement ACQ_TZ pour choisir le fuseau
     36  horaire. Si la variable n'est pas définie, nous
     37  sommes en France...
     38*/ 
    3239TimeZone::TimeZone()
    33 //
    34 //      Constructeur par défaut. Il lit la variable
    35 //      d'environnement ACQ_TZ pour choisir le fuseau
    36 //      horaire. Si la variable n'est pas définie, nous
    37 //      sommes en France...
    38 //--
    3940{
    4041  char* p = getenv("ACQ_TZ");
     
    4748}
    4849
    49 //++
     50//!     Constructeur à partir du nom d'un fuseau horaire.
    5051TimeZone::TimeZone(const char* nom)
    51 //
    52 //      Constructeur à partir du nom d'un fuseau horaire.
    53 //--
    5452{
    5553  SetZone(nom);
    5654}
    5755
    58 //++
     56/*!     
     57  Choisit un fuseau horaire. Contient la définition
     58  du fuseau "France" (GMT+1, DST : dernier dimanche
     59  de mars - dernier dimanche de septembre, c'est-à-dire
     60  pré-gouvernement Juppé), et Chili (GMT-4, DST :
     61  deuxième dimanche d'octobre - deuxième dimanche de mars).
     62*/
    5963void TimeZone::SetZone(const char* nom)
    60 //     
    61 //      Choisit un fuseau horaire. Contient la définition
    62 //      du fuseau "France" (GMT+1, DST : dernier dimanche
    63 //      de mars - dernier dimanche de septembre, c'est-à-dire
    64 //      pré-gouvernement Juppé), et Chili (GMT-4, DST :
    65 //      deuxième dimanche d'octobre - deuxième dimanche de mars).
    66 //--
    6764{
    6865  if (!strcmp(nom,"France")) {
     
    9693}
    9794
    98 //++
     95//!     Teste si une date est en heure d'été (DST).
    9996int TimeZone::IsDst(const Date& date)
    100 //
    101 //      Teste si une date est en heure d'été (DST).
    102 //--
    10397{
    10498  Date dt = date;
     
    139133}
    140134
    141 //++
     135/*!
     136  Retourne la difference TL-GMT pour une date donnée,
     137  en tenant compte de l'heure d'été éventuelle.
     138*/
    142139int TimeZone::GetOffset(const Date& date)
    143 //
    144 //      Retourne la difference TL-GMT pour une date donnée,
    145 //      en tenant compte de l'heure d'été éventuelle.
    146 //--
    147140{
    148141  return IsDst(date) ? gmtOffset+dstOffset : gmtOffset;
    149142}
    150143
    151 //++
    152 // Class        Date
    153 // Lib          Outils++
    154 // include      dates.h
    155 //
    156 //      Une classe date comme une autre, avec gestion
    157 //      temps local / GMT / changement d'heure, et un
    158 //      jour temps sidéral.
    159 //
    160 //      Une partie de la date (heure, jour...) peut être
    161 //      indéterminée. Les comparaisons sont alors faites
    162 //      de façon astucieuse...
    163 //
    164 //      La date peut être déterminée de minuit à minuit
    165 //      ou de midi à midi (nuit d'observation). Logique
    166 //      complexe et peut-être foireuse pour passer de
    167 //      l'un à l'autre, mais pas encore d'ennuis pour le
    168 //      moment... Une date-nuit doit avoir une heure
    169 //      indéterminée.
    170 //
    171 //      Il faut que Date::gTimeZone soit initialisé pour
    172 //      éviter des gros pépins, mais PeidaInit() le fait.
    173 //
    174 //      An 2000 : Lorsqu'on gère des dates sous forme de chaine :
    175 //      * En sortie, 2 caractères pour l'année entre 1950 et 1999
    176 //        et 4 caractères sinon
    177 //      * En entrée, si AA<100 on ajoute 1900.
    178 //--
    179 
    180 //++
     144
     145
     146/*!
     147  \class Date
     148  \ingroup NTools
     149  Date manipulation classe
     150  \warning Unless necessary, DO NOT USE this class.
     151  Use  SOPHYA::TimeStamp instead.
     152
     153  \verbatim
     154 
     155  Une classe date comme une autre, avec gestion
     156  temps local / GMT / changement d'heure, et un
     157  jour temps sidéral.
     158 
     159  Une partie de la date (heure, jour...) peut être
     160  indéterminée. Les comparaisons sont alors faites
     161  de façon astucieuse...
     162 
     163  La date peut être déterminée de minuit à minuit
     164  ou de midi à midi (nuit d'observation). Logique
     165  complexe et peut-être foireuse pour passer de
     166  l'un à l'autre, mais pas encore d'ennuis pour le
     167  moment... Une date-nuit doit avoir une heure
     168  indéterminée.
     169 
     170  Il faut que Date::gTimeZone soit initialisé pour
     171  éviter des gros pépins, mais PeidaInit() le fait.
     172 
     173  An 2000 : Lorsqu'on gère des dates sous forme de chaine :
     174  * En sortie, 2 caractères pour l'année entre 1950 et 1999
     175  et 4 caractères sinon
     176  * En entrée, si AA<100 on ajoute 1900.
     177
     178*/
     179//!     Retourne le nombre de jours dans le mois
    181180short Date::MonthDays(short mois, short annee)
    182 //
    183 //      Retourne le nombre de jours dans le mois
    184 //--
    185181{
    186182  if (mois<1 || mois>12) throw ParmError(PExcLongMessage(""));
     
    206202}
    207203   
    208 //++
     204//!  Retourne le nombre de jours dans l'année
    209205short Date::YearDays(short annee)
    210 //
    211 //      Retourne le nombre de jours dans l'année
    212 //--
    213206{
    214207  return (((annee%4 == 0) && (annee%100 != 0)) || (annee%400 == 0)) ? 366 : 365;
    215208}
    216209
    217 //++
    218210bool Date::UndetDate() const
    219 //
    220 //      Retourne true si une partie de la date (jour
    221 //      ou mois ou année) est indéterminée.
    222 //--
     211/*!
     212  Retourne true si une partie de la date (jour
     213  ou mois ou année) est indéterminée.
     214*/
    223215{
    224216  return ((AA == -1) || (MM == -1) || (JJ == -1));
    225217}
    226218
    227 //++
     219/*!
     220  Retourne true si toute la date (jour
     221  et mois et année) est indéterminée.
     222*/
    228223bool Date::AllUndetDate() const
    229 //
    230 //      Retourne true si toute la date (jour
    231 //      et mois et année) est indéterminée.
    232 //--
    233224{
    234225  return ((AA == -1) && (MM == -1) && (JJ == -1));
    235226}
    236227
    237 //++
    238228bool Date::UndetTime() const
    239 //
    240 //      Retourne true si une partie de l'heure (heure
    241 //      ou minutes ou secondes) est indéterminée.
    242 //--
     229/*!     
     230  Retourne true si une partie de l'heure (heure
     231  ou minutes ou secondes) est indéterminée.
     232*/
    243233{
    244234  return ((hh == -1) || (mm == -1) || (ss == -1));
    245235}
    246236
    247 //++
     237
     238/*!
     239  Retourne true si toute l'heure (heure
     240  et minutes et secondes) est indéterminée.
     241*/
    248242bool Date::AllUndetTime() const
    249 //
    250 //      Retourne true si toute l'heure (heure
    251 //      et minutes et secondes) est indéterminée.
    252 //--
    253243{
    254244  return ((hh == -1) && (mm == -1) && (ss == -1));
     
    257247//Date::operator double() const
    258248
    259 //++
     249//!     Jours écoulés depuis le 0 janvier 1901 0h TU
    260250double
    261251Date::GetDays() const
    262 //
    263 //      Jours écoulés depuis le 0 janvier 1901 0h TU
    264 //--
    265252{
    266253   if (UndetTime() && !AllUndetTime()) throw ParmError(PExcLongMessage(""));
     
    281268}
    282269
    283 //++
     270//!     Initialisation a partir jours écoulés depuis le 0 janvier 1901 0h TU
    284271void Date::Set(double t)
    285 //
    286 //      Jours écoulés depuis le 0 janvier 1901 0h TU
    287 //--
    288272{
    289273   t += 1/8640000.0;
     
    323307   nuit = 0;
    324308}
    325 //++
     309
     310//!     Constructeur. Prend l'heure courante...
    326311Date::Date()
    327 //
    328 //      Constructeur. Prend l'heure courante...
    329 //--
    330312: timeZone(gTimeZone)
    331313{
     
    342324}
    343325
    344 //++
     326//!     Constructeur simple.
    345327Date::Date(int J, int M, int A, int h, int m, double s)
    346 //
    347 //      Constructeur simple.
    348 //--
    349328: JJ(J), MM(M), AA(A), hh(h), mm(m), ss(s), timeZone(gTimeZone), nuit(0)
    350329{
    351330}
    352331
    353 //++
     332//!     Constructeur à partir des jours écoulés depuis le 0 janvier 1901 0h TU
    354333Date::Date(double t)
    355 //
    356 //      Constructeur à partir des
    357 //      jours écoulés depuis le 0 janvier 1901 0h TU
    358 //
    359 //--
    360334: timeZone(gTimeZone)
    361335{
     
    363337}
    364338
    365 //++
     339//!     On change de fuseau horaire.
    366340void Date::SetTimeZone(TimeZone* tz)
    367 //
    368 //      On change de fuseau horaire.
    369 //--
    370341{
    371342  timeZone = tz;
    372343}
    373344
    374 //++
     345/*!
     346  Constructeur à partir de la date sous la forme
     347  'DD/MM/YYYY'  'HH/MM/SS', et tOpt est Date::kGMTTime
     348  (par défaut) ou Date::kLocalTime.
     349*/
    375350Date::Date(const char* date, const char* heure, int tOpt)
    376 //
    377 //      Constructeur à partir de la date sous la forme
    378 //      'DD/MM/YYYY'  'HH/MM/SS', et tOpt est Date::kGMTTime
    379 //      (par défaut) ou Date::kLocalTime.
    380 //
    381 //      Tout ou partie de la date peut être indéterminée ('??').
    382 //--
    383351: timeZone(gTimeZone)
    384352{
     
    386354}
    387355
    388 //++
     356/*!
     357  Constructeur à partir de la date sous la forme
     358  'DD/MM/YYYY'  'HH/MM/SS', et tOpt est Date::kGMTTime
     359  (par défaut) ou Date::kLocalTime.
     360 
     361  Tout ou partie de la date peut être indéterminée ('??').
     362*/
    389363Date::Date(string const& date, string const& heure, int tOpt)
    390 //
    391 //      Constructeur à partir de la date sous la forme
    392 //      'DD/MM/YYYY'  'HH/MM/SS', et tOpt est Date::kGMTTime
    393 //      (par défaut) ou Date::kLocalTime.
    394 //
    395 //      Tout ou partie de la date peut être indéterminée ('??').
    396 //--
    397364: timeZone(gTimeZone)
    398365{
     
    400367}
    401368
    402 //++
     369/*!
     370  Positionne la date sous la forme
     371  'DD/MM/YYYY'  'HH/MM/SS', et tOpt est Date::kGMTTime
     372  (par défaut) ou Date::kLocalTime.
     373 
     374  Tout ou partie de la date peut être indéterminée ('??').
     375*/
    403376void Date::Set(string const& date, string const& heure, int tOpt)
    404 //
    405 //      Positionne la date sous la forme
    406 //      'DD/MM/YYYY'  'HH/MM/SS', et tOpt est Date::kGMTTime
    407 //      (par défaut) ou Date::kLocalTime.
    408 //
    409 //      Tout ou partie de la date peut être indéterminée ('??').
    410 //--
    411377{
    412378  Set(date.c_str(), heure == "" ? (char*)NULL : heure.c_str(), tOpt);
    413379}
    414380
    415 //++
     381/*!
     382  Positionne la date sous la forme
     383  'DD/MM/YYYY'  'HH/MM/SS', et tOpt est Date::kGMTTime
     384  (par défaut) ou Date::kLocalTime.
     385 
     386  Tout ou partie de la date peut être indéterminée ('??').
     387*/
    416388void Date::Set(const char* date, const char* heure, int tOpt)
    417 //
    418 //      Positionne la date sous la forme
    419 //      'DD/MM/YYYY'  'HH/MM/SS', et tOpt est Date::kGMTTime
    420 //      (par défaut) ou Date::kLocalTime.
    421 //
    422 //      Tout ou partie de la date peut être indéterminée ('??').
    423 //--
    424389{
    425390  nuit = 0;
     
    538503}
    539504
    540 //++
     505/*!
     506  Récupère la date sous la forme d'une chaîne 'DD/MM/YYYY'
     507  en tOpt = Date::kGMTTime ou Date::kLocalTime.
     508*/
    541509void Date::GetDateStr(char* s, int tOpt) const
    542 //
    543 //      Récupère la date sous la forme d'une chaîne 'DD/MM/YYYY'
    544 //      en tOpt = Date::kGMTTime ou Date::kLocalTime.
    545 //--
    546510{
    547511  Date dt(*this);
     
    566530}
    567531
    568 //++
     532//!     Code EROS de la date.
    569533void Date::GetDateCode(char* s, int tOpt) const
    570 //
    571 //      Code EROS de la date.
    572 //--
    573534{
    574535  Date dt(*this);
     
    603564}
    604565
    605 //++
     566//!     Récupère l'heure sous la forme 'HH:MM:SS'
    606567void Date::GetTimeStr(char* s, int tOpt) const
    607 //
    608 //      Récupère l'heure sous la forme 'HH:MM:SS'
    609 //--
    610568{
    611569  Date dt(*this);
     
    624582}
    625583
    626 //++
     584//!     Récupèrera un jour le temps sidéral.
    627585void Date::GetSidTStr(char* s) const
    628 //
    629 //      Récupèrera un jour le temps sidéral.
    630 //--
    631586{
    632587  strcpy(s,"TOBEDONE!!");
    633588}
    634589
    635 //++
    636590string Date::DateStr(int tOpt) const
    637 //
    638 //      Récupère la date sous la forme d'une chaîne 'DD/MM/YYYY'
    639 //      en tOpt = Date::kGMTTime ou Date::kLocalTime.
    640 //--
     591/*!
     592  Récupère la date sous la forme d'une chaîne 'DD/MM/YYYY'
     593  en tOpt = Date::kGMTTime ou Date::kLocalTime.
     594*/
    641595{
    642596   char s[20];
     
    645599}
    646600
    647 //++
     601//!     Code EROS de la date.
    648602string Date::DateCode(int tOpt) const
    649 //
    650 //      Code EROS de la date.
    651 //--
    652603{
    653604   char s[20];
     
    656607}
    657608
    658 //++
     609//!     Récupère l'heure sous la forme 'HH:MM:SS'
    659610string Date::TimeStr(int tOpt) const
    660 //
    661 //      Récupère l'heure sous la forme 'HH:MM:SS'
    662 //--
    663611{
    664612   char s[20];
     
    667615}
    668616
    669 //++
     617//!     Récupèrera un jour le temps sidéral.
    670618string Date::SidTStr() const
    671 //
    672 //      Récupèrera un jour le temps sidéral.
    673 //--
    674619{
    675620   char s[20];
     
    678623}
    679624
    680 //++
     625//!   Retourne le jour dans la semaine, 0-6 avec 0 = Date::jour_Lundi.
    681626int Date::DayOfWeek(int tOpt) const
    682 //
    683 //      Retourne le jour dans la semaine, 0-6
    684 //      avec 0 = Date::jour_Lundi.
    685 //--
    686627{
    687628  double t = GetDays();
     
    696637}
    697638
    698 //++
     639/*!
     640  Retourne la date correspondant au ieme joursem dans le mois
     641  correspondant (exemple, 2e dimanche de mars 1960).
     642*/
    699643short Date::NthMonthDay(short i, short joursem, short mois, short annee)
    700 //
    701 //      Retourne la date correspondant au ieme joursem dans le mois
    702 //      correspondant (exemple, 2e dimanche de mars 1960).
    703 //--
    704644{
    705645   if (i>0) {
     
    717657}
    718658
    719 //++
     659//! Ajout un nombre \b dt en jours
    720660Date& Date::operator += (double dt)     
    721 //
    722 //      dt en jours
    723 //--
    724661{
    725662  int u = UndetTime();
     
    729666}
    730667
    731 //++
     668//!  retranche un intervalle de temps \b dt en jours
    732669Date& Date::operator -= (double dt)   
    733 //
    734 //      dt en jours
    735 //--
    736670{
    737671  int u = UndetTime();
     
    741675}
    742676
    743 //++
    744677Date operator + (Date const& d, double dt)
    745 //
    746 //--
    747678{
    748679  Date a(d);
     
    751682}
    752683
    753 //++
    754684Date operator - (Date const& d, double dt)
    755 //
    756 //--
    757685{
    758686  Date a(d);
     
    761689}
    762690
    763 //++
     691//!     Résultat en jours
    764692double operator - (Date const& a, Date const& b)
    765 //
    766 //      Résultat en jours
    767 //--
    768693{
    769694  if (a.UndetTime() != b.UndetTime()) throw ParmError(PExcLongMessage(""));
     
    772697}
    773698
    774 //++
     699//!     On n'a pas égalite dès que des éléments déterminés sont différents
    775700bool operator == (Date const& a, Date const& b)
    776 //
    777 //      On n'a pas égalite dès que des éléments déterminés sont différents
    778 //--
    779701{
    780702  if (a.nuit && a.UndetTime() && !b.nuit && !b.UndetTime() && b.hh<12)
     
    792714}
    793715
    794 //++
    795716bool operator != (Date const& a, Date const& b)
    796 //
    797 //--
    798717{
    799718  return !(a == b);
    800719}
    801720
    802 //++
     721//!     Inégalité large. Pas de subtilités
    803722bool operator <= (Date const& a, Date const& b)
    804 //
    805 //      Inégalité large. Pas de subtilités
    806 //--
    807723{
    808724  if (a.nuit && a.UndetTime() && !b.nuit && !b.UndetTime() && b.hh<12)
     
    838754}
    839755
    840 //++
     756/*!
     757  Inégalité stricte, codée à partir de la large pour résoudre
     758  sans cas particuliers les subtilités
     759  01/02/95 < ??/03/95 mais pas 01/02/95 < ??/02/95
     760*/
    841761bool operator < (Date const& a, Date const& b)
    842 //
    843 //      Inégalité stricte, codée à partir de la large pour résoudre
    844 //      sans cas particuliers les subtilités
    845 //      01/02/95 < ??/03/95 mais pas 01/02/95 < ??/02/95
    846 //--
    847762{
    848763  return (a <= b) && !(a == b);
    849764}
    850765
    851 //++
    852766bool operator >= (Date const& a, Date const& b)
    853 //
    854 //--
    855767{
    856768  return (b <= a);
    857769}
    858770
    859 //++
    860771bool operator > (Date const& a, Date const& b)
    861 //
    862 //--
    863772{
    864773  return (b < a);
    865774}
    866775
    867 //++
    868776ostream& operator << (ostream& s, Date const& d)
    869 //
    870 //--
    871777{
    872778  char x[20];
     
    877783  return s;
    878784}
     785
Note: See TracChangeset for help on using the changeset viewer.