122 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			122 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #ifndef DATE_TIME_DATE_FORMATTING_LIMITED_HPP___ | ||
|  | #define DATE_TIME_DATE_FORMATTING_LIMITED_HPP___ | ||
|  | 
 | ||
|  | /* Copyright (c) 2002-2004 CrystalClear Software, Inc. | ||
|  |  * Use, modification and distribution is subject to the  | ||
|  |  * Boost Software License, Version 1.0. (See accompanying | ||
|  |  * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) | ||
|  |  * Author: Jeff Garland, Bart Garst | ||
|  |  * $Date$ | ||
|  |  */ | ||
|  | 
 | ||
|  | #include "boost/date_time/iso_format.hpp" | ||
|  | #include "boost/date_time/compiler_config.hpp" | ||
|  | #include <string> | ||
|  | #include <sstream> | ||
|  | #include <iomanip> | ||
|  | 
 | ||
|  | 
 | ||
|  | namespace boost { | ||
|  | namespace date_time { | ||
|  | 
 | ||
|  |   //! Formats a month as as string into an ostream | ||
|  |   template<class month_type, class format_type> | ||
|  |   class month_formatter | ||
|  |   { | ||
|  |   public: | ||
|  |     //! Formats a month as as string into an ostream | ||
|  |     /*! This function demands that month_type provide | ||
|  |      *  functions for converting to short and long strings | ||
|  |      *  if that capability is used. | ||
|  |      */ | ||
|  |     static std::ostream& format_month(const month_type& month, | ||
|  |                                       std::ostream& os) | ||
|  |     { | ||
|  |       switch (format_type::month_format())  | ||
|  |       { | ||
|  |         case month_as_short_string:  | ||
|  |         {  | ||
|  |           os << month.as_short_string();  | ||
|  |           break; | ||
|  |         } | ||
|  |         case month_as_long_string:  | ||
|  |         {  | ||
|  |           os << month.as_long_string();  | ||
|  |           break; | ||
|  |         } | ||
|  |         case month_as_integer:  | ||
|  |         {  | ||
|  |           os << std::setw(2) << std::setfill('0') << month.as_number(); | ||
|  |           break; | ||
|  |         } | ||
|  |       | ||
|  |       } | ||
|  |       return os; | ||
|  |     } // format_month | ||
|  |   }; | ||
|  | 
 | ||
|  | 
 | ||
|  |   //! Convert ymd to a standard string formatting policies | ||
|  |   template<class ymd_type, class format_type> | ||
|  |   class ymd_formatter | ||
|  |   { | ||
|  |   public: | ||
|  |     //! Convert ymd to a standard string formatting policies | ||
|  |     /*! This is standard code for handling date formatting with | ||
|  |      *  year-month-day based date information.  This function  | ||
|  |      *  uses the format_type to control whether the string will | ||
|  |      *  contain separator characters, and if so what the character | ||
|  |      *  will be.  In addtion, it can format the month as either | ||
|  |      *  an integer or a string as controled by the formatting  | ||
|  |      *  policy | ||
|  |      */  | ||
|  |     static std::string ymd_to_string(ymd_type ymd) | ||
|  |     { | ||
|  |       typedef typename ymd_type::month_type month_type; | ||
|  |       std::ostringstream ss; | ||
|  |       ss << ymd.year; | ||
|  |       if (format_type::has_date_sep_chars()) { | ||
|  |         ss << format_type::month_sep_char(); | ||
|  |       } | ||
|  |       //this name is a bit ugly, oh well.... | ||
|  |       month_formatter<month_type,format_type>::format_month(ymd.month, ss); | ||
|  |       if (format_type::has_date_sep_chars()) { | ||
|  |         ss << format_type::day_sep_char(); | ||
|  |       } | ||
|  |       ss  << std::setw(2) << std::setfill('0')  | ||
|  |           << ymd.day; | ||
|  |       return ss.str(); | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  | 
 | ||
|  |   //! Convert a date to string using format policies | ||
|  |   template<class date_type, class format_type> | ||
|  |   class date_formatter | ||
|  |   { | ||
|  |   public: | ||
|  |     //! Convert to a date to standard string using format policies | ||
|  |     static std::string date_to_string(date_type d) | ||
|  |     { | ||
|  |       typedef typename date_type::ymd_type ymd_type; | ||
|  |       if (d.is_not_a_date()) { | ||
|  |         return format_type::not_a_date(); | ||
|  |       } | ||
|  |       if (d.is_neg_infinity()) { | ||
|  |         return format_type::neg_infinity(); | ||
|  |       } | ||
|  |       if (d.is_pos_infinity()) { | ||
|  |         return format_type::pos_infinity(); | ||
|  |       } | ||
|  |       ymd_type ymd = d.year_month_day(); | ||
|  |       return ymd_formatter<ymd_type, format_type>::ymd_to_string(ymd); | ||
|  |     }     | ||
|  |   }; | ||
|  | 
 | ||
|  | 
 | ||
|  | } } //namespace date_time | ||
|  | 
 | ||
|  | 
 | ||
|  | #endif | ||
|  | 
 |