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 |
|
---|