source: XIOS/trunk/src/date.hpp @ 549

Last change on this file since 549 was 549, checked in by rlacroix, 6 years ago

Revised calendar functionalities:

  • the calendar is now configured from a specific calendar child node of the context in the XML configuration file. Example: <calendar type="Gregorian" start_date="2012-03-01 15:00:00" time_origin="2012-02-29 15:00:00" timestep="1h" />
  • the calendar type should now be configured when defining the start time and/or the time origin.
  • the start time and the time origin are now optional, 0000-01-01 00:00:00 will be used by default. It is also possible to define them partially. For example, 2015 and 2014-12 are valid dates corresponding respectively to 2015-01-01 00:00:00 and 2014-12-01 00:00:00.
  • an optional duration offset can be added to the start date and time origin. For example, it's possible to define the date 2015-01-12 12:00:00 as 2015-01-11 + 36h or 2015-01-11 12:00:00 + 1d. The duration format is the same as the time step. Being that the date is optional, it is possible to only use a duration (for example + 42s is the same as 0000-01-01 00:00:00 + 42s). An error will be raised if a duration based on the time step is used before the time step was configured. For example, the following would cause an error: <calendar type="Gregorian" start_date="+ 1ts" /> but <calendar type="Gregorian" start_date="+ 1ts" timestep="0.5h" /> would not.
  • new Fortran interface to define the calendar:
    • xios_define_calendar(type[, timestep, start_date, time_origin]) will create a calendar when none had previously been defined. Only the type argument is mandatory, the rest is optional. Calendar operations on dates and durations are possible as soon as the calendar is created (either using this procedure or directly from the XML configuration file).
    • the following getter and setter procedures are available: xios_set_timestep, xios_set_start_date, xios_set_time_origin, xios_get_calendar_type, xios_get_timestep, xios_get_start_date, xios_get_time_origin.
  • new Fortran interface to interact with the calendar: xios_update_calendar, xios_get_current_date, xios_get_year_length_in_seconds, xios_get_day_length_in_seconds.
  • new Fortran interface for date conversion: xios_date_get_second_of_year, xios_date_get_day_of_year, xios_date_get_fraction_of_year, xios_date_get_second_of_day, xios_date_get_fraction_of_day.
  • two new placeholders are available to format the file name when splitting the output (split_freq_format attribute):
    • %S the number of seconds since the time origin
    • %D the integral number of days since the time origin
  • Property copyright set to
    Software name : XIOS (Xml I/O Server)
    http://forge.ipsl.jussieu.fr/ioserver
    Creation date : January 2009
    Licence : CeCCIL version2
    see license file in root directory : Licence_CeCILL_V2-en.txt
    or http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
    Holder : CEA/LSCE (Laboratoire des Sciences du CLimat et de l'Environnement)
    CNRS/IPSL (Institut Pierre Simon Laplace)
    Project Manager : Yann Meurdesoif
    yann.meurdesoif@cea.fr
File size: 3.5 KB
Line 
1#ifndef __XMLIO_CDate__
2#define __XMLIO_CDate__
3
4/// xios headers ///
5#include "xmlioserver_spl.hpp"
6#include "exception.hpp"
7#include "duration.hpp"
8
9namespace xios
10{
11      /// ////////////////////// Déclarations ////////////////////// ///
12      class CCalendar;
13
14      class CDate
15      {
16         public :
17
18            /// Constructeurs ///
19            //!< Create an empty date associated to no calendar
20            CDate(void);
21            //!< Create an empty date associated to the specified calendar
22            CDate(const CCalendar& cal);
23            //!< Create a date associated to the specified calendar
24            CDate(const CCalendar& cal, int yr, int mth, int d,
25                                        int hr = 0, int min = 0, int sec = 0);
26            CDate(const CDate& odate);
27            CDate(const CDate* const odate); // Not implemented yet
28
29            /// Destructeur ///
30            ~CDate(void);
31
32            /// Opérateurs ///
33            CDate& operator=(const CDate& date);
34            friend StdOStream& operator<<(StdOStream& out, const CDate& date);
35            friend StdIStream& operator>>(StdIStream& in, CDate& date); // Non testée.
36
37            //!< Return the number of seconds since the time origin fixed when creating the calendar
38            operator Time(void) const;
39
40            /// Traitements ///
41            bool checkDate(void); // Vérifie la validité de la date.
42
43            /// Divers accesseurs ///
44            int getYear  (void) const;
45            int getMonth (void) const;
46            int getDay   (void) const;
47            int getHour  (void) const;
48            int getMinute(void) const;
49            int getSecond(void) const;
50
51            //!< Get the calendar associated to the date
52            const CCalendar& getRelCalendar(void) const;
53            bool hasRelCalendar(void) const;
54
55            //!< Get the number of seconds since the beginning of the year
56            int getSecondOfYear() const;
57            //!< Get the number of days (expressed as a real number) since the beginning of the year
58            double getDayOfYear() const;
59            //!< Get the fraction of the current year as a real number between 0 and 1
60            double getFractionOfYear() const;
61            //!< Get the number of seconds since the beginning of the day
62            int getSecondOfDay() const;
63            //!< Get the fraction of the current day as a real number between 0 and 1
64            double getFractionOfDay() const;
65
66            /// Mutateurs ///
67            void setYear  (int newyear);
68            void setMonth (int newmonth);
69            void setDay   (int newday);
70            void setHour  (int newhour);
71            void setMinute(int newminute);
72            void setSecond(int newsecond);
73
74            void setDate(int yr, int mth, int d,
75                         int hr = 0, int min = 0, int sec = 0);
76
77            void addMonth (int value);
78
79            //!< Set the calendar associated to the date
80            bool setRelCalendar(const CCalendar& relCalendar);
81
82            /// Autres ///
83            StdString toString(void) const;
84            StdString getStryyyymmdd(void) const;
85            string getStr(const string& str) const;
86
87
88         public : /* static */
89
90            static CDate FromString(const StdString& str, const CCalendar& calendar);
91
92         private :
93
94            /// Propriétés privées ///
95            const CCalendar* relCalendar; //!< Calendar associated to the date
96            int year, month, day, hour, minute, second; // Année, mois, ...
97
98
99      }; // class CDate;
100
101} // namespace xios
102
103#endif // __XMLIO_CDate__
Note: See TracBrowser for help on using the repository browser.