| #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: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ |
| */ |
| |
| #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 |