304 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			304 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #ifndef ISO_FORMAT_HPP___ | ||
|  | #define ISO_FORMAT_HPP___ | ||
|  | 
 | ||
|  | /* Copyright (c) 2002,2003 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/parse_format_base.hpp" | ||
|  | 
 | ||
|  | namespace boost { | ||
|  | namespace date_time { | ||
|  | 
 | ||
|  | //! Class to provide common iso formatting spec | ||
|  | template<class charT> | ||
|  | class iso_format_base { | ||
|  | public: | ||
|  |   //! Describe month format -- its an integer in iso format | ||
|  |   static month_format_spec month_format() | ||
|  |   { | ||
|  |     return month_as_integer; | ||
|  |   } | ||
|  | 
 | ||
|  |   //! String used printed is date is invalid | ||
|  |   static const charT* not_a_date() | ||
|  |   {      | ||
|  |     return "not-a-date-time"; | ||
|  |   } | ||
|  |   //! String used to for positive infinity value | ||
|  |   static const charT* pos_infinity() | ||
|  |   { | ||
|  |     return "+infinity"; | ||
|  |   } | ||
|  |   //! String used to for positive infinity value | ||
|  |   static const charT* neg_infinity() | ||
|  |   { | ||
|  |     return "-infinity"; | ||
|  |   } | ||
|  | 
 | ||
|  |   //! ISO char for a year -- used in durations | ||
|  |   static charT year_sep_char() | ||
|  |   { | ||
|  |     return 'Y'; | ||
|  |   } | ||
|  |   //! ISO char for a month | ||
|  |   static charT month_sep_char() | ||
|  |   { | ||
|  |     return '-'; | ||
|  |   } | ||
|  |   //! ISO char for a day | ||
|  |   static charT day_sep_char() | ||
|  |   { | ||
|  |     return '-'; | ||
|  |   } | ||
|  |   //! char for minute | ||
|  |   static charT hour_sep_char() | ||
|  |   { | ||
|  |     return ':'; | ||
|  |   } | ||
|  |   //! char for minute | ||
|  |   static charT minute_sep_char() | ||
|  |   { | ||
|  |     return ':'; | ||
|  |   } | ||
|  |   //! char for second | ||
|  |   static charT second_sep_char() | ||
|  |   { | ||
|  |     return ':'; | ||
|  |   } | ||
|  |   //! ISO char for a period | ||
|  |   static charT period_start_char() | ||
|  |   { | ||
|  |     return 'P'; | ||
|  |   } | ||
|  |   //! Used in time in mixed strings to set start of time | ||
|  |   static charT time_start_char() | ||
|  |   { | ||
|  |     return 'T'; | ||
|  |   } | ||
|  | 
 | ||
|  |   //! Used in mixed strings to identify start of a week number | ||
|  |   static charT week_start_char() | ||
|  |   { | ||
|  |     return 'W'; | ||
|  |   } | ||
|  | 
 | ||
|  |   //! Separators for periods | ||
|  |   static charT period_sep_char() | ||
|  |   { | ||
|  |     return '/'; | ||
|  |   } | ||
|  |   //! Separator for hh:mm:ss | ||
|  |   static charT time_sep_char() | ||
|  |   { | ||
|  |     return ':'; | ||
|  |   } | ||
|  |   //! Preferred Separator for hh:mm:ss,decimal_fraction | ||
|  |   static charT fractional_time_sep_char() | ||
|  |   { | ||
|  |     return ','; | ||
|  |   } | ||
|  | 
 | ||
|  |   static bool is_component_sep(charT sep) | ||
|  |   { | ||
|  |     switch(sep) { | ||
|  |     case 'H': | ||
|  |     case 'M': | ||
|  |     case 'S': | ||
|  |     case 'W': | ||
|  |     case 'T': | ||
|  |     case 'Y': | ||
|  |     case 'D':return true; | ||
|  |     default: | ||
|  |       return false; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   static bool is_fractional_time_sep(charT sep) | ||
|  |   { | ||
|  |     switch(sep) { | ||
|  |     case ',': | ||
|  |     case '.': return true; | ||
|  |     default: return false; | ||
|  |     } | ||
|  |   } | ||
|  |   static bool is_timezone_sep(charT sep) | ||
|  |   { | ||
|  |     switch(sep) { | ||
|  |     case '+': | ||
|  |     case '-': return true; | ||
|  |     default: return false; | ||
|  |     } | ||
|  |   } | ||
|  |   static charT element_sep_char() | ||
|  |   { | ||
|  |     return '-'; | ||
|  |   } | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | #ifndef BOOST_NO_STD_WSTRING | ||
|  | 
 | ||
|  | //! Class to provide common iso formatting spec | ||
|  | template<> | ||
|  | class iso_format_base<wchar_t> { | ||
|  | public: | ||
|  |   //! Describe month format -- its an integer in iso format | ||
|  |   static month_format_spec month_format() | ||
|  |   { | ||
|  |     return month_as_integer; | ||
|  |   } | ||
|  | 
 | ||
|  |   //! String used printed is date is invalid | ||
|  |   static const wchar_t* not_a_date() | ||
|  |   {       | ||
|  |     return L"not-a-date-time"; | ||
|  |   } | ||
|  |   //! String used to for positive infinity value | ||
|  |   static const wchar_t* pos_infinity() | ||
|  |   { | ||
|  |     return L"+infinity"; | ||
|  |   } | ||
|  |   //! String used to for positive infinity value | ||
|  |   static const wchar_t* neg_infinity() | ||
|  |   { | ||
|  |     return L"-infinity"; | ||
|  |   } | ||
|  | 
 | ||
|  |   //! ISO char for a year -- used in durations | ||
|  |   static wchar_t year_sep_char() | ||
|  |   { | ||
|  |     return 'Y'; | ||
|  |   } | ||
|  |   //! ISO char for a month | ||
|  |   static wchar_t month_sep_char() | ||
|  |   { | ||
|  |     return '-'; | ||
|  |   } | ||
|  |   //! ISO char for a day | ||
|  |   static wchar_t day_sep_char() | ||
|  |   { | ||
|  |     return '-'; | ||
|  |   } | ||
|  |   //! char for minute | ||
|  |   static wchar_t hour_sep_char() | ||
|  |   { | ||
|  |     return ':'; | ||
|  |   } | ||
|  |   //! char for minute | ||
|  |   static wchar_t minute_sep_char() | ||
|  |   { | ||
|  |     return ':'; | ||
|  |   } | ||
|  |   //! char for second | ||
|  |   static wchar_t second_sep_char() | ||
|  |   { | ||
|  |     return ':'; | ||
|  |   } | ||
|  |   //! ISO char for a period | ||
|  |   static wchar_t period_start_char() | ||
|  |   { | ||
|  |     return 'P'; | ||
|  |   } | ||
|  |   //! Used in time in mixed strings to set start of time | ||
|  |   static wchar_t time_start_char() | ||
|  |   { | ||
|  |     return 'T'; | ||
|  |   } | ||
|  | 
 | ||
|  |   //! Used in mixed strings to identify start of a week number | ||
|  |   static wchar_t week_start_char() | ||
|  |   { | ||
|  |     return 'W'; | ||
|  |   } | ||
|  | 
 | ||
|  |   //! Separators for periods | ||
|  |   static wchar_t period_sep_char() | ||
|  |   { | ||
|  |     return '/'; | ||
|  |   } | ||
|  |   //! Separator for hh:mm:ss | ||
|  |   static wchar_t time_sep_char() | ||
|  |   { | ||
|  |     return ':'; | ||
|  |   } | ||
|  |   //! Preferred Separator for hh:mm:ss,decimal_fraction | ||
|  |   static wchar_t fractional_time_sep_char() | ||
|  |   { | ||
|  |     return ','; | ||
|  |   } | ||
|  | 
 | ||
|  |   static bool is_component_sep(wchar_t sep) | ||
|  |   { | ||
|  |     switch(sep) { | ||
|  |     case 'H': | ||
|  |     case 'M': | ||
|  |     case 'S': | ||
|  |     case 'W': | ||
|  |     case 'T': | ||
|  |     case 'Y': | ||
|  |     case 'D':return true; | ||
|  |     default: | ||
|  |       return false; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   static bool is_fractional_time_sep(wchar_t sep) | ||
|  |   { | ||
|  |     switch(sep) { | ||
|  |     case ',': | ||
|  |     case '.': return true; | ||
|  |     default: return false; | ||
|  |     } | ||
|  |   } | ||
|  |   static bool is_timezone_sep(wchar_t sep) | ||
|  |   { | ||
|  |     switch(sep) { | ||
|  |     case '+': | ||
|  |     case '-': return true; | ||
|  |     default: return false; | ||
|  |     } | ||
|  |   } | ||
|  |   static wchar_t element_sep_char() | ||
|  |   { | ||
|  |     return '-'; | ||
|  |   } | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | #endif // BOOST_NO_STD_WSTRING | ||
|  | 
 | ||
|  | //! Format description for iso normal YYYYMMDD | ||
|  | template<class charT> | ||
|  | class iso_format : public iso_format_base<charT> { | ||
|  | public: | ||
|  |   //! The ios standard format doesn't use char separators | ||
|  |   static bool has_date_sep_chars() | ||
|  |   { | ||
|  |     return false; | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | //! Extended format uses seperators YYYY-MM-DD | ||
|  | template<class charT> | ||
|  | class iso_extended_format : public iso_format_base<charT> { | ||
|  | public: | ||
|  |   //! Extended format needs char separators | ||
|  |   static bool has_date_sep_chars() | ||
|  |   { | ||
|  |     return true; | ||
|  |   } | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | } } //namespace date_time | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #endif |