[857] | 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 |
|
---|