1 #ifndef POSIX_TIME_CONVERSION_HPP___
2 #define POSIX_TIME_CONVERSION_HPP___
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
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"
20 namespace posix_time
{
23 //! Function that converts a time_t into a ptime.
25 ptime
from_time_t(std::time_t t
)
27 ptime
start(gregorian::date(1970,1,1));
28 return start
+ seconds(static_cast<long>(t
));
31 //! Convert a time to a tm structure truncating any fractional seconds
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
42 //! Convert a time_duration to a tm structure truncating any fractional seconds and zeroing fields for date components
44 std::tm
to_tm(const boost::posix_time::time_duration
& td
) {
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
59 //! Convert a tm struct to a ptime ignoring is_dst flag
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
));
67 #if defined(BOOST_HAS_FTIME)
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.
75 * \note FILETIME is part of the Win32 API, so it is not portable to non-windows
78 * \note The function is templated on the FILETIME type, so that
79 * it can be used with both native FILETIME and the ad-hoc
80 * boost::date_time::winapi::file_time type.
82 template< typename TimeT
, typename FileTimeT
>
84 TimeT
from_ftime(const FileTimeT
& ft
)
86 return boost::date_time::time_from_ftime
<TimeT
>(ft
);
89 #endif // BOOST_HAS_FTIME
91 } } //namespace boost::posix_time