Chris@16: #ifndef DATE_CLOCK_DEVICE_HPP___ Chris@16: #define DATE_CLOCK_DEVICE_HPP___ Chris@16: Chris@16: /* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc. Chris@16: * Use, modification and distribution is subject to the Chris@16: * Boost Software License, Version 1.0. (See accompanying Chris@16: * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) Chris@16: * Author: Jeff Garland, Bart Garst Chris@101: * $Date$ Chris@16: */ Chris@16: Chris@16: #include "boost/date_time/c_time.hpp" Chris@16: Chris@16: Chris@16: namespace boost { Chris@16: namespace date_time { Chris@16: Chris@16: //! A clock providing day level services based on C time_t capabilities Chris@16: /*! This clock uses Posix interfaces as its implementation and hence Chris@16: * uses the timezone settings of the operating system. Incorrect Chris@16: * user settings will result in incorrect results for the calls Chris@16: * to local_day. Chris@16: */ Chris@16: template Chris@16: class day_clock Chris@16: { Chris@16: public: Chris@16: typedef typename date_type::ymd_type ymd_type; Chris@16: //! Get the local day as a date type Chris@16: static date_type local_day() Chris@16: { Chris@16: return date_type(local_day_ymd()); Chris@16: } Chris@16: //! Get the local day as a ymd_type Chris@16: static typename date_type::ymd_type local_day_ymd() Chris@16: { Chris@16: ::std::tm result; Chris@16: ::std::tm* curr = get_local_time(result); Chris@101: return ymd_type(static_cast(curr->tm_year + 1900), Chris@101: static_cast(curr->tm_mon + 1), Chris@101: static_cast(curr->tm_mday)); Chris@16: } Chris@16: //! Get the current day in universal date as a ymd_type Chris@16: static typename date_type::ymd_type universal_day_ymd() Chris@16: { Chris@16: ::std::tm result; Chris@16: ::std::tm* curr = get_universal_time(result); Chris@101: return ymd_type(static_cast(curr->tm_year + 1900), Chris@101: static_cast(curr->tm_mon + 1), Chris@101: static_cast(curr->tm_mday)); Chris@16: } Chris@16: //! Get the UTC day as a date type Chris@16: static date_type universal_day() Chris@16: { Chris@16: return date_type(universal_day_ymd()); Chris@16: } Chris@16: Chris@16: private: Chris@16: static ::std::tm* get_local_time(std::tm& result) Chris@16: { Chris@16: ::std::time_t t; Chris@16: ::std::time(&t); Chris@16: return c_time::localtime(&t, &result); Chris@16: } Chris@16: static ::std::tm* get_universal_time(std::tm& result) Chris@16: { Chris@16: ::std::time_t t; Chris@16: ::std::time(&t); Chris@16: return c_time::gmtime(&t, &result); Chris@16: } Chris@16: Chris@16: }; Chris@16: Chris@16: } } //namespace date_time Chris@16: Chris@16: Chris@16: #endif