source: NonGTP/Boost/boost/date_time/posix_time/conversion.hpp @ 857

Revision 857, 2.9 KB checked in by igarcia, 18 years ago (diff)
Line 
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
18namespace boost {
19
20namespace 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
Note: See TracBrowser for help on using the repository browser.