Ugly, not-to-be-pushed sucking in of all of Boost to get windows to work.
[dyninst.git] / external / boost / date_time / posix_time / conversion.hpp
1 #ifndef POSIX_TIME_CONVERSION_HPP___
2 #define POSIX_TIME_CONVERSION_HPP___
3
4 /* Copyright (c) 2002-2005 CrystalClear Software, Inc.
5  * Use, modification and distribution is subject to the 
6  * Boost Software License, Version 1.0. (See accompanying
7  * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
8  * Author: Jeff Garland, Bart Garst
9  * $Date: 2005/11/01 04:26:55 $
10  */
11
12 #include "boost/date_time/posix_time/ptime.hpp"
13 #include "boost/date_time/posix_time/posix_time_duration.hpp"
14 #include "boost/date_time/filetime_functions.hpp"
15 #include "boost/date_time/c_time.hpp"
16 #include "boost/date_time/gregorian/conversion.hpp"
17
18 namespace boost {
19
20 namespace posix_time {
21
22
23   //! Function that converts a time_t into a ptime.
24   inline
25   ptime from_time_t(std::time_t t) 
26   {
27     ptime start(gregorian::date(1970,1,1));
28     return start + seconds(static_cast<long>(t));
29   }
30
31   //! Convert a time to a tm structure truncating any fractional seconds 
32   inline
33   std::tm to_tm(const boost::posix_time::ptime& t) {
34     std::tm timetm = boost::gregorian::to_tm(t.date());
35     boost::posix_time::time_duration td = t.time_of_day();
36     timetm.tm_hour = td.hours(); 
37     timetm.tm_min = td.minutes(); 
38     timetm.tm_sec = td.seconds();
39     timetm.tm_isdst = -1; // -1 used when dst info is unknown 
40     return timetm;
41   }
42   //! Convert a time_duration to a tm structure truncating any fractional seconds and zeroing fields for date components 
43   inline
44   std::tm to_tm(const boost::posix_time::time_duration& td) {
45     std::tm timetm;
46     timetm.tm_year = 0;
47     timetm.tm_mon = 0;
48     timetm.tm_mday = 0;
49     timetm.tm_wday = 0;
50     timetm.tm_yday = 0;
51     
52     timetm.tm_hour = date_time::absolute_value(td.hours()); 
53     timetm.tm_min = date_time::absolute_value(td.minutes());
54     timetm.tm_sec = date_time::absolute_value(td.seconds());
55     timetm.tm_isdst = -1; // -1 used when dst info is unknown
56     return timetm;
57   }
58
59   //! Convert a tm struct to a ptime ignoring is_dst flag
60   inline
61   ptime ptime_from_tm(const std::tm& timetm) {
62     boost::gregorian::date d = boost::gregorian::date_from_tm(timetm);
63     return ptime(d, time_duration(timetm.tm_hour, timetm.tm_min, timetm.tm_sec));
64   }
65
66
67 #if defined(BOOST_HAS_FTIME)
68   
69   //! Function to create a time object from an initialized FILETIME struct.
70   /*! Function to create a time object from an initialized FILETIME struct.
71    * A FILETIME struct holds 100-nanosecond units (0.0000001). When 
72    * built with microsecond resolution the FILETIME's sub second value 
73    * will be truncated. Nanosecond resolution has no truncation. 
74    *
75    * Note ftime is part of the Win32 API, so it is not portable to non-windows
76    * platforms.
77    */
78   template<class time_type>
79   inline
80   time_type from_ftime(const FILETIME& ft)
81   {
82     return boost::date_time::time_from_ftime<time_type>(ft);
83   }
84
85 #endif // BOOST_HAS_FTIME
86
87 } } //namespace boost::posix_time
88
89
90
91
92 #endif
93