| [2654] | 1 | // This may look like C code, but it is really -*- C++ -*- | 
|---|
|  | 2 |  | 
|---|
|  | 3 | #ifndef TIMESTAMP_H_SEEN | 
|---|
|  | 4 | #define TIMESTAMP_H_SEEN | 
|---|
|  | 5 |  | 
|---|
|  | 6 | // Classe TimeStamp (Date+heure) | 
|---|
|  | 7 | // | 
|---|
|  | 8 | // R. Ansari      UPS+LAL IN2P3/CNRS  2005 | 
|---|
|  | 9 | // Code recupere en partie ds dates.h dates.cc (classe Date) / E. Aubourg 1995-2000 | 
|---|
|  | 10 |  | 
|---|
|  | 11 |  | 
|---|
|  | 12 | #include "machdefs.h" | 
|---|
| [2830] | 13 | #include "objfio.h" | 
|---|
| [2654] | 14 | #include <string> | 
|---|
|  | 15 | #include <iostream> | 
|---|
|  | 16 |  | 
|---|
|  | 17 | namespace SOPHYA { | 
|---|
|  | 18 |  | 
|---|
|  | 19 | //! Class representing date and time | 
|---|
| [2830] | 20 | class TimeStamp : public AnyDataObj { | 
|---|
| [2654] | 21 | public: | 
|---|
|  | 22 | /*  Pour utilisation ulterieure | 
|---|
|  | 23 | //! GMT / local time enum | 
|---|
|  | 24 | enum {kGMTTime=0, kLocalTime=1}; | 
|---|
|  | 25 | */ | 
|---|
|  | 26 | //! Month name enum | 
|---|
|  | 27 | enum Month {month_January=1, month_February, month_March, month_April, month_May, month_June, month_July, | 
|---|
|  | 28 | month_August, month_September, month_October, month_November, month_December}; | 
|---|
|  | 29 |  | 
|---|
| [2830] | 30 | enum StrFmt { FmtPackedDateTime , FmtDateOnly, FmtTimeOnly, FmtDateTime }; | 
|---|
|  | 31 |  | 
|---|
| [2654] | 32 | //! Default Constructor : current date and time (GMT) | 
|---|
|  | 33 | TimeStamp(); | 
|---|
|  | 34 | TimeStamp(TimeStamp const & ts); | 
|---|
|  | 35 | //! Constructor with specification of number of days since 0 Jan 1901 0h TU | 
|---|
|  | 36 | TimeStamp(double days); | 
|---|
| [2826] | 37 | //! Constructor from number of days (since 0/01/1901) and number of seconds | 
|---|
|  | 38 | TimeStamp(int_8 days, r_8 seconds); | 
|---|
| [2654] | 39 | //! Constructor with specification of day,month,year,hour,minutes,seconds | 
|---|
|  | 40 | TimeStamp(int year, int month, int day, int hour, int min, double sec); | 
|---|
| [2830] | 41 | //! Constructor with specification of date & time in the format YYYY/MM/DD hh:mm:ss | 
|---|
|  | 42 | TimeStamp(string const & date, string const & hour); | 
|---|
|  | 43 | //! Constructor with specification of date & time in the format YYYY/MM/DD hh:mm:ss | 
|---|
| [2654] | 44 | TimeStamp(const char* date, const char* hour); | 
|---|
| [2830] | 45 | //! Constructor with specification of date & time in the format YYYY-MM-DDThh:mm:ss | 
|---|
|  | 46 | TimeStamp(string& datim); | 
|---|
|  | 47 | //! Constructor with specification of date & time in the format YYYY-MM-DDThh:mm:ss | 
|---|
|  | 48 | TimeStamp(const char* datim); | 
|---|
| [2654] | 49 |  | 
|---|
|  | 50 | //! Set the value of the time stamp copying from "ts" | 
|---|
|  | 51 | void Set(TimeStamp const & ts); | 
|---|
|  | 52 | //! Sets the value of the time stamp from the number of days since 0 Jan 1901 0h TU | 
|---|
|  | 53 | void Set(double days); | 
|---|
| [2826] | 54 | //! Sets the value of the time stamp from the number of days and seconds | 
|---|
|  | 55 | void Set(int_8 days, r_8 seconds); | 
|---|
| [2830] | 56 | //! Sets the value of the time stamp from a string in the format YYYY-MM-DDThh:mm:ss | 
|---|
|  | 57 | void Set(const char * datim); | 
|---|
|  | 58 | //! Sets the value of the time stamp from a string in the format YYYY-MM-DDThh:mm:ss | 
|---|
|  | 59 | inline void Set(string const & datim)  { Set(datim.c_str()); } | 
|---|
| [2654] | 60 | //! initialize with current date and time (GMT) | 
|---|
|  | 61 | void SetNow(); | 
|---|
|  | 62 |  | 
|---|
|  | 63 | //! The equal (set) operator | 
|---|
|  | 64 | inline TimeStamp& operator= (TimeStamp const & ts) | 
|---|
|  | 65 | { Set(ts); return(*this); } | 
|---|
|  | 66 |  | 
|---|
|  | 67 | //! Sets the value of the date (days) | 
|---|
|  | 68 | void SetDate(int year, int month, int day); | 
|---|
|  | 69 | //! Sets the value of the date (format: DD/MM/YYYY) | 
|---|
|  | 70 | void SetDate(const char* date); | 
|---|
|  | 71 | //! Sets the value of the date (format: DD/MM/YYYY) | 
|---|
|  | 72 | inline void SetDate(string const& date) { SetDate(date.c_str()); } | 
|---|
|  | 73 |  | 
|---|
|  | 74 | //! Sets the value of the time of day (hours) | 
|---|
|  | 75 | void SetHour(int hour, int min, double sec); | 
|---|
|  | 76 | //! Sets the value of the time of day (format: hh:mm:ss[.ss]) | 
|---|
|  | 77 | void SetHour(const char* hour); | 
|---|
|  | 78 | //! Sets the value of the time of day (format: hh:mm:ss[.ss]) | 
|---|
|  | 79 | inline void SetHour(string const& hour) { SetHour(hour.c_str()); } | 
|---|
|  | 80 |  | 
|---|
|  | 81 | //! Return the date (Year, Month, Day) | 
|---|
|  | 82 | void GetDate(int& year, int& month, int& day) const; | 
|---|
|  | 83 | //! Return the time of the day | 
|---|
|  | 84 | void GetHour(int& hour, int& min, double& sec) const; | 
|---|
|  | 85 |  | 
|---|
|  | 86 | //! Return the value of the TimeStamp as days.fraction_days since 0 Jan 1901 | 
|---|
|  | 87 | double ToDays() const; | 
|---|
| [2826] | 88 | //! Conversion operator to double - return ToDays() | 
|---|
| [2654] | 89 | inline operator double() const { return ToDays(); } | 
|---|
|  | 90 |  | 
|---|
|  | 91 | //! Return the timestamp in string format | 
|---|
| [2830] | 92 | string ToString(StrFmt fmt=FmtPackedDateTime) const; | 
|---|
| [2654] | 93 |  | 
|---|
| [2826] | 94 | //! Return the integral number of days since 0 Jan 1901 | 
|---|
|  | 95 | inline int_8 DaysPart() { return mDays; } | 
|---|
|  | 96 | //! Return the fractional number of days in seconds ( 0 < nsec < 86400. ) | 
|---|
|  | 97 | inline r_8 SecondsPart() { return mSeconds; } | 
|---|
| [2654] | 98 |  | 
|---|
| [2826] | 99 | //! Prints the date/time in string format on \b cout | 
|---|
| [2830] | 100 | inline  void    Print(StrFmt fmt=FmtDateTime) const | 
|---|
|  | 101 | { Print(cout, fmt); } | 
|---|
| [2826] | 102 | //! Prints the date/time in string format on stream \b os | 
|---|
| [2830] | 103 | virtual void    Print(ostream& os, StrFmt fmt=FmtDateTime)  const; | 
|---|
| [2826] | 104 |  | 
|---|
| [2654] | 105 | //! Number of days in a given month | 
|---|
|  | 106 | static int   MonthDays(int year, int month); | 
|---|
|  | 107 | //! Number of days in a given year | 
|---|
|  | 108 | static int YearDays(int annee); | 
|---|
|  | 109 | //! Number of  days since 0 janvier 1901 0h TU | 
|---|
|  | 110 | static int_8 ConvertToDays(int year, int month, int day); | 
|---|
|  | 111 |  | 
|---|
|  | 112 |  | 
|---|
|  | 113 | protected: | 
|---|
|  | 114 | r_8 mSeconds;     // Number of seconds since 00:00:00 | 
|---|
|  | 115 | int_8 mDays;      // Number of days since 0 Jan 1901 | 
|---|
|  | 116 | }; | 
|---|
|  | 117 |  | 
|---|
|  | 118 | /*! operator << overloading - Prints date/time in string format on \b os*/ | 
|---|
|  | 119 | inline ostream& operator << (ostream& s, TimeStamp const & ts) | 
|---|
|  | 120 | {  ts.Print(s);  return(s);  } | 
|---|
|  | 121 |  | 
|---|
| [2830] | 122 | /*! Writes the object in the POutPersist stream \b os */ | 
|---|
|  | 123 | inline POutPersist& operator << (POutPersist& os, TimeStamp & obj) | 
|---|
|  | 124 | { ObjFileIO<TimeStamp> fio(&obj);  fio.Write(os);  return(os); } | 
|---|
|  | 125 | /*! Reads the object from the PInPersist stream \b is */ | 
|---|
|  | 126 | inline PInPersist& operator >> (PInPersist& is, TimeStamp & obj) | 
|---|
|  | 127 | { ObjFileIO<TimeStamp> fio(&obj); is.SkipToNextObject(); fio.Read(is); return(is); } | 
|---|
|  | 128 |  | 
|---|
| [2654] | 129 | } // namespace SOPHYA | 
|---|
|  | 130 |  | 
|---|
|  | 131 | #endif | 
|---|