source: vendor/nemo/current/NEMOGCM/EXTERNAL/XIOS/extern/boost/include/boost/date_time/posix_time/conversion.hpp @ 44

Last change on this file since 44 was 44, checked in by cholod, 12 years ago

Load NEMO_TMP into vendor/nemo/current.

File size: 3.1 KB
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.txt or http://www.boost.org/LICENSE_1_0.txt)
8 * Author: Jeff Garland, Bart Garst
9 * $Date: 2010-06-09 14:10:13 -0400 (Wed, 09 Jun 2010) $
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  //! Convert a time to a tm structure truncating any fractional seconds
34  inline
35  std::tm to_tm(const boost::posix_time::ptime& t) {
36    std::tm timetm = boost::gregorian::to_tm(t.date());
37    boost::posix_time::time_duration td = t.time_of_day();
38    timetm.tm_hour = td.hours();
39    timetm.tm_min = td.minutes();
40    timetm.tm_sec = td.seconds();
41    timetm.tm_isdst = -1; // -1 used when dst info is unknown
42    return timetm;
43  }
44  //! Convert a time_duration to a tm structure truncating any fractional seconds and zeroing fields for date components
45  inline
46  std::tm to_tm(const boost::posix_time::time_duration& td) {
47    std::tm timetm;
48    std::memset(&timetm, 0, sizeof(timetm));
49    timetm.tm_hour = date_time::absolute_value(td.hours());
50    timetm.tm_min = date_time::absolute_value(td.minutes());
51    timetm.tm_sec = date_time::absolute_value(td.seconds());
52    timetm.tm_isdst = -1; // -1 used when dst info is unknown
53    return timetm;
54  }
55
56  //! Convert a tm struct to a ptime ignoring is_dst flag
57  inline
58  ptime ptime_from_tm(const std::tm& timetm) {
59    boost::gregorian::date d = boost::gregorian::date_from_tm(timetm);
60    return ptime(d, time_duration(timetm.tm_hour, timetm.tm_min, timetm.tm_sec));
61  }
62
63
64#if defined(BOOST_HAS_FTIME)
65
66  //! Function to create a time object from an initialized FILETIME struct.
67  /*! Function to create a time object from an initialized FILETIME struct.
68   * A FILETIME struct holds 100-nanosecond units (0.0000001). When
69   * built with microsecond resolution the FILETIME's sub second value
70   * will be truncated. Nanosecond resolution has no truncation.
71   *
72   * \note FILETIME is part of the Win32 API, so it is not portable to non-windows
73   * platforms.
74   *
75   * \note The function is templated on the FILETIME type, so that
76   *       it can be used with both native FILETIME and the ad-hoc
77   *       boost::date_time::winapi::file_time type.
78   */
79  template< typename TimeT, typename FileTimeT >
80  inline
81  TimeT from_ftime(const FileTimeT& ft)
82  {
83    return boost::date_time::time_from_ftime<TimeT>(ft);
84  }
85
86#endif // BOOST_HAS_FTIME
87
88} } //namespace boost::posix_time
89
90
91
92
93#endif
94
Note: See TracBrowser for help on using the repository browser.