123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- #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
|