source: trunk/FACT++/src/Time.h @ 10252

Last change on this file since 10252 was 10252, checked in by tbretz, 10 years ago
Added new manipulators with out the fractional part of the seconds and fixed setting of MJD.
File size: 3.7 KB
Line 
1#ifndef FACT_Time
2#define FACT_Time
3
4#include <boost/date_time/local_time/local_time.hpp>
5
6// **************************************************************************
7/** @class _time_format
8
9@brief Helper to manipulate the input and output format of a time in a stream
10
11This class represents a stream manipulator. It is used to change the input
12or output format of a Time (or boost::posix_time) object to and from a
13stream.
14
15**/
16// **************************************************************************
17class _time_format
18{
19    friend std::ostream &operator<<(std::ostream &out, const _time_format &f);
20    friend std::istream &operator>>(std::istream &in,  const _time_format &f);
21private:
22    const char *ptr; /// pointer given to the iostreams
23
24public:
25    /// initialize ptr with what should be passed to the iostreams
26    _time_format(const char *txt) : ptr(txt) { }
27};
28
29class Time : public boost::posix_time::ptime
30{
31public:
32    /// A none-time, this can be used as a simple representation of an invalid time
33    static const Time None;
34
35    /// A stream manipulator to set the output/input format
36    static const _time_format fmt(const char *txt=0);
37
38    static const _time_format reset;   /// Remove the format description from the stream
39    static const _time_format def;     /// set to format to the locale default
40    static const _time_format std;     /// set to format to the iso standard
41    static const _time_format sql;     /// set to format to the sql format
42    static const _time_format ssql;    /// set to format to the sql format (without the fraction of seconds)
43    static const _time_format iso;     /// set to format to the extended iso standard
44    static const _time_format magic;   /// set to format to the MAGIC report format
45    static const _time_format smagic;  /// set to format to the MAGIC report format (without the fraction of seconds)
46
47    /// Enum used in the instantisation of the class to change the inititalisation value
48    enum init_t
49    {
50        none,  ///< Do not initialize the time
51        utc,   ///< Initialize with UTC
52        local  ///< Initialize with local time
53    };
54
55private:
56    /// Points to the famous 1/1/1970, the standard offset for unix times
57    const static boost::gregorian::date fUnixOffset;
58
59public:
60    // Constructors
61    Time(enum init_t type=utc);
62    Time(const time_t &tm, const int &ms);
63    Time(const ptime &pt) : boost::posix_time::ptime(pt) { }
64    Time(short year, unsigned char month, unsigned char day,
65         unsigned char h=0, unsigned char m=0, unsigned char s=0,
66         unsigned int us=0);
67
68    // Convesion from and to a string
69    std::string GetAsStr(const char *fmt="%Y-%m-%d %H:%M:%S") const;
70    void SetFromStr(const std::string &str, const char *fmt="%Y-%m-%d %H:%M:%S");
71
72    // Conversion to and from MJD
73    void Mjd(double mjd);
74    double Mjd() const;
75
76    // Check validity
77    bool IsValid() const   { return *this != boost::date_time::not_special; }
78    bool operator!() const { return *this == boost::date_time::not_special; }
79
80    // Getter
81    unsigned short Y() const  { return date().year(); }
82    unsigned short M() const  { return date().month(); }
83    unsigned short D() const  { return date().day(); }
84
85    unsigned short h() const  { return time_of_day().hours(); }
86    unsigned short m() const  { return time_of_day().minutes(); }
87    unsigned short s() const  { return time_of_day().seconds(); }
88
89    unsigned int   ms() const { return time_of_day().total_milliseconds()%1000; }
90    unsigned int   us() const { return time_of_day().total_microseconds()%1000000; }
91};
92
93std::ostream &operator<<(std::ostream &out, const _time_format &f);
94std::istream &operator>>(std::istream &in,  const _time_format &f);
95
96#endif
Note: See TracBrowser for help on using the repository browser.