New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
date_formatting.hpp in vendors/XIOS/current/extern/boost/include/boost/date_time – NEMO

source: vendors/XIOS/current/extern/boost/include/boost/date_time/date_formatting.hpp @ 3408

Last change on this file since 3408 was 3408, checked in by rblod, 12 years ago

importing initial XIOS vendor drop

  • Property svn:keywords set to Id
File size: 3.8 KB
Line 
1#ifndef DATE_TIME_DATE_FORMATTING_HPP___
2#define DATE_TIME_DATE_FORMATTING_HPP___
3
4/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
5 * Use, modification and distribution is subject to the
6 * Boost Software License, Version 1.0. (See accompanying
7 * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
8 * Author: Jeff Garland, Bart Garst
9 * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $
10 */
11
12#include "boost/date_time/iso_format.hpp"
13#include "boost/date_time/compiler_config.hpp"
14#include <string>
15#include <sstream>
16#include <iomanip>
17
18/* NOTE: "formatter" code for older compilers, ones that define
19 * BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS, is located in 
20 * date_formatting_limited.hpp
21 */
22
23namespace boost {
24namespace date_time {
25
26  //! Formats a month as as string into an ostream
27  template<class month_type, class format_type, class charT=char>
28  class month_formatter
29  {
30    typedef std::basic_ostream<charT> ostream_type;
31  public:
32    //! Formats a month as as string into an ostream
33    /*! This function demands that month_type provide
34     *  functions for converting to short and long strings
35     *  if that capability is used.
36     */
37    static ostream_type& format_month(const month_type& month,
38                                      ostream_type &os)
39    {
40      switch (format_type::month_format()) 
41      {
42        case month_as_short_string:
43        { 
44          os << month.as_short_string(); 
45          break;
46        }
47        case month_as_long_string:
48        { 
49          os << month.as_long_string(); 
50          break;
51        }
52        case month_as_integer:
53        { 
54          os << std::setw(2) << std::setfill(os.widen('0')) << month.as_number();
55          break;
56        }
57     
58      }
59      return os;
60    } // format_month
61  };
62
63
64  //! Convert ymd to a standard string formatting policies
65  template<class ymd_type, class format_type, class charT=char>
66  class ymd_formatter
67  {
68  public:
69    //! Convert ymd to a standard string formatting policies
70    /*! This is standard code for handling date formatting with
71     *  year-month-day based date information.  This function
72     *  uses the format_type to control whether the string will
73     *  contain separator characters, and if so what the character
74     *  will be.  In addtion, it can format the month as either
75     *  an integer or a string as controled by the formatting
76     *  policy
77     */ 
78    static std::basic_string<charT> ymd_to_string(ymd_type ymd)
79    {
80      typedef typename ymd_type::month_type month_type;
81      std::basic_ostringstream<charT> ss;
82      ss << ymd.year;
83      if (format_type::has_date_sep_chars()) {
84        ss << format_type::month_sep_char();
85      }
86      //this name is a bit ugly, oh well....
87      month_formatter<month_type,format_type,charT>::format_month(ymd.month, ss);
88      if (format_type::has_date_sep_chars()) {
89        ss << format_type::day_sep_char();
90      }
91      ss  << std::setw(2) << std::setfill(ss.widen('0')) 
92          << ymd.day;
93      return ss.str();
94    }
95  };
96
97
98  //! Convert a date to string using format policies
99  template<class date_type, class format_type, class charT=char>
100  class date_formatter
101  {
102  public:
103    typedef std::basic_string<charT> string_type;
104    //! Convert to a date to standard string using format policies
105    static string_type date_to_string(date_type d)
106    {
107      typedef typename date_type::ymd_type ymd_type;
108      if (d.is_not_a_date()) {
109        return string_type(format_type::not_a_date());
110      }
111      if (d.is_neg_infinity()) {
112        return string_type(format_type::neg_infinity());
113      }
114      if (d.is_pos_infinity()) {
115        return string_type(format_type::pos_infinity());
116      }
117      ymd_type ymd = d.year_month_day();
118      return ymd_formatter<ymd_type, format_type, charT>::ymd_to_string(ymd);
119    }   
120  };
121
122
123} } //namespace date_time
124
125
126#endif
127
Note: See TracBrowser for help on using the repository browser.