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.txt or http://www.boost.org/LICENSE_1_0.txt)
8 * Author: Jeff Garland, Bart Garst
9 * $Date$
10 */
11
12#include <cstring>
13#include <boost/date_time/posix_time/ptime.hpp>
14#include <boost/date_time/posix_time/posix_time_duration.hpp>
15#include <boost/date_time/filetime_functions.hpp>
16#include <boost/date_time/c_time.hpp>
17#include <boost/date_time/time_resolution_traits.hpp> // absolute_value
18#include <boost/date_time/gregorian/conversion.hpp>
19
20namespace boost {
21
22namespace posix_time {
23
24
25 //! Function that converts a time_t into a ptime.
26 inline
27 ptime from_time_t(std::time_t t)
28 {
29 ptime start(gregorian::date(1970,1,1));
30 return start + seconds(static_cast<long>(t));
31 }
32
33 //! Function that converts a ptime into a time_t
34 inline
35 std::time_t to_time_t(ptime pt)
36 {
37 time_duration dur = pt - ptime(gregorian::date(1970,1,1));
38 return std::time_t(dur.total_seconds());
39 }
40
41 //! Convert a time to a tm structure truncating any fractional seconds
42 inline
43 std::tm to_tm(const boost::posix_time::ptime& t) {
44 std::tm timetm = boost::gregorian::to_tm(d: t.date());
45 boost::posix_time::time_duration td = t.time_of_day();
46 timetm.tm_hour = td.hours();
47 timetm.tm_min = td.minutes();
48 timetm.tm_sec = td.seconds();
49 timetm.tm_isdst = -1; // -1 used when dst info is unknown
50 return timetm;
51 }
52 //! Convert a time_duration to a tm structure truncating any fractional seconds and zeroing fields for date components
53 inline
54 std::tm to_tm(const boost::posix_time::time_duration& td) {
55 std::tm timetm;
56 std::memset(s: &timetm, c: 0, n: sizeof(timetm));
57 timetm.tm_hour = date_time::absolute_value(x: td.hours());
58 timetm.tm_min = date_time::absolute_value(x: td.minutes());
59 timetm.tm_sec = date_time::absolute_value(x: td.seconds());
60 timetm.tm_isdst = -1; // -1 used when dst info is unknown
61 return timetm;
62 }
63
64 //! Convert a tm struct to a ptime ignoring is_dst flag
65 inline
66 ptime ptime_from_tm(const std::tm& timetm) {
67 boost::gregorian::date d = boost::gregorian::date_from_tm(datetm: timetm);
68 return ptime(d, time_duration(timetm.tm_hour, timetm.tm_min, timetm.tm_sec));
69 }
70
71
72#if defined(BOOST_HAS_FTIME)
73
74 //! Function to create a time object from an initialized FILETIME struct.
75 /*! Function to create a time object from an initialized FILETIME struct.
76 * A FILETIME struct holds 100-nanosecond units (0.0000001). When
77 * built with microsecond resolution the FILETIME's sub second value
78 * will be truncated. Nanosecond resolution has no truncation.
79 *
80 * \note FILETIME is part of the Win32 API, so it is not portable to non-windows
81 * platforms.
82 *
83 * \note The function is templated on the FILETIME type, so that
84 * it can be used with both native FILETIME and the ad-hoc
85 * boost::date_time::winapi::file_time type.
86 */
87 template< typename TimeT, typename FileTimeT >
88 inline
89 TimeT from_ftime(const FileTimeT& ft)
90 {
91 return boost::date_time::time_from_ftime<TimeT>(ft);
92 }
93
94#endif // BOOST_HAS_FTIME
95
96} } //namespace boost::posix_time
97
98
99
100
101#endif
102
103

source code of boost/boost/date_time/posix_time/conversion.hpp