Line data Source code
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.txt or http://www.boost.org/LICENSE_1_0.txt) 8 : * Author: Jeff Garland, Bart Garst 9 : * $Date$ 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 : 19 : namespace boost { 20 : namespace 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 0 : static time_type local_time() 34 : { 35 : ::std::time_t t; 36 0 : ::std::time(&t); 37 : ::std::tm curr, *curr_ptr; 38 : //curr_ptr = ::std::localtime(&t); 39 0 : curr_ptr = c_time::localtime(&t, &curr); 40 0 : 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 0 : static time_type create_time(::std::tm* current) 67 : { 68 0 : date_type d(static_cast<unsigned short>(current->tm_year + 1900), 69 0 : static_cast<unsigned short>(current->tm_mon + 1), 70 0 : static_cast<unsigned short>(current->tm_mday)); 71 0 : time_duration_type td(current->tm_hour, 72 0 : current->tm_min, 73 0 : current->tm_sec); 74 0 : return time_type(d,td); 75 : } 76 : 77 : }; 78 : 79 : 80 : } } //namespace date_time 81 : 82 : 83 : #endif