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
 | 
