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