source: NonGTP/Boost/boost/date_time/time_clock.hpp @ 857

Revision 857, 2.3 KB checked in by igarcia, 19 years ago (diff)
RevLine 
[857]1#ifndef DATE_TIME_TIME_CLOCK_HPP___
2#define DATE_TIME_TIME_CLOCK_HPP___
3
4/* Copyright (c) 2002,2003,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/03/19 21:39:59 $
10 */
11
12/*! @file time_clock.hpp
13  This file contains the interface for clock devices.
14*/
15
16#include "boost/date_time/c_time.hpp"
17#include "boost/shared_ptr.hpp"
18
19namespace boost {
20namespace date_time {
21
22
23  //! A clock providing time level services based on C time_t capabilities
24  /*! This clock provides resolution to the 1 second level
25   */
26  template<class time_type>
27  class second_clock
28  {
29  public:
30    typedef typename time_type::date_type date_type;
31    typedef typename time_type::time_duration_type time_duration_type;
32
33    static time_type local_time()
34    {
35      ::std::time_t t;
36      ::std::time(&t);
37      ::std::tm curr, *curr_ptr;
38      //curr_ptr = ::std::localtime(&t);
39      curr_ptr = c_time::localtime(&t, &curr);
40      return create_time(curr_ptr);
41    }
42
43
44    //! Get the current day in universal date as a ymd_type
45    static time_type universal_time()
46    {
47
48      ::std::time_t t;
49      ::std::time(&t);
50      ::std::tm curr, *curr_ptr;
51      //curr_ptr = ::std::gmtime(&t);
52      curr_ptr = c_time::gmtime(&t, &curr);
53      return create_time(curr_ptr);
54    }
55
56    template<class time_zone_type>
57    static time_type local_time(boost::shared_ptr<time_zone_type> tz_ptr)
58    {
59      typedef typename time_type::utc_time_type utc_time_type;
60      utc_time_type utc_time = second_clock<utc_time_type>::universal_time();
61      return time_type(utc_time, tz_ptr);
62    }
63
64
65  private:
66    static time_type create_time(::std::tm* current)
67    {
68      date_type d(static_cast<unsigned short>(current->tm_year + 1900),
69                  static_cast<unsigned short>(current->tm_mon + 1),
70                  static_cast<unsigned short>(current->tm_mday));
71      time_duration_type td(current->tm_hour,
72                            current->tm_min,
73                            current->tm_sec);
74      return time_type(d,td);
75    }
76
77  };
78
79
80} } //namespace date_time
81
82
83#endif
Note: See TracBrowser for help on using the repository browser.