source: Sophya/trunk/SophyaLib/BaseTools/timestamp.h@ 3678

Last change on this file since 3678 was 2830, checked in by ansari, 20 years ago

Amelioration classe TimeStamp - prise en charge format YYYY-MM-DDThh:mm:ss
et TimeStamp rendu PPersist - Reza 8/11/2005

File size: 5.1 KB
Line 
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"
13#include "objfio.h"
14#include <string>
15#include <iostream>
16
17namespace SOPHYA {
18
19//! Class representing date and time
20class TimeStamp : public AnyDataObj {
21public:
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
30 enum StrFmt { FmtPackedDateTime , FmtDateOnly, FmtTimeOnly, FmtDateTime };
31
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);
37 //! Constructor from number of days (since 0/01/1901) and number of seconds
38 TimeStamp(int_8 days, r_8 seconds);
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);
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
44 TimeStamp(const char* date, const char* hour);
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);
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);
54 //! Sets the value of the time stamp from the number of days and seconds
55 void Set(int_8 days, r_8 seconds);
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()); }
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;
88 //! Conversion operator to double - return ToDays()
89 inline operator double() const { return ToDays(); }
90
91 //! Return the timestamp in string format
92 string ToString(StrFmt fmt=FmtPackedDateTime) const;
93
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; }
98
99 //! Prints the date/time in string format on \b cout
100 inline void Print(StrFmt fmt=FmtDateTime) const
101 { Print(cout, fmt); }
102 //! Prints the date/time in string format on stream \b os
103 virtual void Print(ostream& os, StrFmt fmt=FmtDateTime) const;
104
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
113protected:
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*/
119inline ostream& operator << (ostream& s, TimeStamp const & ts)
120 { ts.Print(s); return(s); }
121
122/*! Writes the object in the POutPersist stream \b os */
123inline 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 */
126inline PInPersist& operator >> (PInPersist& is, TimeStamp & obj)
127{ ObjFileIO<TimeStamp> fio(&obj); is.SkipToNextObject(); fio.Read(is); return(is); }
128
129} // namespace SOPHYA
130
131#endif
Note: See TracBrowser for help on using the repository browser.