Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_calendar.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_calendar.hpp	(revision 118)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_calendar.hpp	(revision 119)
@@ -20,7 +20,7 @@
          virtual int getYearTotalLength(const Date& d) const { return (365 * 86400); } // Retourne la durÃ©e d'une annÃ©e en seconde.
 
-         virtual int getYearLength(void)   const { return (12); } // Retourne la durÃ©e d'une annÃ©e en mois.
-         virtual int getDayLength(void)    const { return (24); } // Retourne la durÃ©e d'un jour en heures.
-         virtual int getHourLength(void)   const { return (60); } // Retourne la durÃ©e d'une heure en minute.
+         virtual int getYearLength  (void) const { return (12); } // Retourne la durÃ©e d'une annÃ©e en mois.
+         virtual int getDayLength   (void) const { return (24); } // Retourne la durÃ©e d'un jour en heures.
+         virtual int getHourLength  (void) const { return (60); } // Retourne la durÃ©e d'une heure en minute.
          virtual int getMinuteLength(void) const { return (60); } // Retourne la durÃ©e d'une minute en secondes.
 
@@ -57,5 +57,11 @@
          AbstractCalendar() : AbstractObject(), initDate(*this), currentDate(initDate)
          {/* Ne rien faire de plus */}
-         AbstractCalendar(const string& _id) : AbstractObject(_id), initDate(*this), currentDate(initDate)
+
+         AbstractCalendar(const string& _id, int yr = 0, int mth = 1, int d = 1, int hr = 0, int min = 0 , int sec = 0)
+            : AbstractObject(_id), initDate(*this, yr, mth, d, hr, min, sec), currentDate(initDate)
+         {/* Ne rien faire de plus */}
+
+         AbstractCalendar(const string& _id, const string& dateStr)
+            : AbstractObject(_id), initDate(Date::FromString(dateStr, *this)), currentDate(initDate)
          {/* Ne rien faire de plus */}
 
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/attribut.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/attribut.hpp	(revision 118)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/attribut.hpp	(revision 119)
@@ -93,2 +93,4 @@
 
 #endif //__ATTRIBUT__
+
+
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp	(revision 118)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp	(revision 119)
@@ -3,4 +3,5 @@
 using namespace XMLIOSERVER;
 using namespace XMLIOSERVER::XML;
+
 using namespace std;
 
@@ -32,4 +33,5 @@
 
       string sttr("12/07/2005 - 10:11:30");
+      string stttr("111s 14.36 mi 7y 3.9y 3.4 mg");
       Date d3 = Date::FromString(sttr, *calendar);
 
@@ -38,4 +40,6 @@
       Duration sc1 = Second * 175.3 - Minute * 13109.6 + Hour * 135.1 - Day * 616.4 + Month * 236.0 + Year * 33.9;
       Duration sc2 = 60 * Day;
+
+      Duration sc3 = Duration::FromString(stttr);
 
       std::cout << calendar->getInitDate()    << std::endl;
@@ -52,13 +56,12 @@
 
       std::cout << (dd+sc2) << std::endl;
-      std::cout << (d3) << std::endl;
+      std::cout << (d3)  << std::endl;
+
+      std::cout << (sc3) << std::endl;
 
       delete calendar;
 
-      // On Ã©crit l'arborescence rÃ©sultante du traitement sur la sortie.
+      //On Ã©crit l'arborescence rÃ©sultante du traitement sur la sortie.
       //Context::ShowTree(std::clog);
-
-      //Calendar::Date date;
-      //std::cout << date << std::endl;
 
    }
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/calendar.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/calendar.hpp	(revision 118)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/calendar.hpp	(revision 119)
@@ -8,4 +8,6 @@
       public :
          JulianCalendar() : AbstractCalendar("Julian")
+         {/* Ne rien faire de plus */}
+         JulianCalendar(const string& dateStr) : AbstractCalendar("Julian", dateStr)
          {/* Ne rien faire de plus */}
 
@@ -32,4 +34,6 @@
       public :
          GregorianCalendar() : AbstractCalendar("Gregorian")
+         {/* Ne rien faire de plus */}
+         GregorianCalendar(const string& dateStr) : AbstractCalendar("Gregorian", dateStr)
          {/* Ne rien faire de plus */}
 
@@ -61,4 +65,7 @@
          NoLeapCalendar() : AbstractCalendar("NoLeap")
          {/* Ne rien faire de plus */}
+         NoLeapCalendar(const string& dateStr) : AbstractCalendar("NoLeap", dateStr)
+         {/* Ne rien faire de plus */}
+
          virtual ~NoLeapCalendar()
          {/* Ne rien faire de plus */}
@@ -70,4 +77,6 @@
       public :
          AllLeapCalendar() : AbstractCalendar("AllLeap")
+         {/* Ne rien faire de plus */}
+         AllLeapCalendar(const string& dateStr) : AbstractCalendar("AllLeap", dateStr)
          {/* Ne rien faire de plus */}
 
@@ -87,4 +96,6 @@
          D360Calendar() : AbstractCalendar("D360")
          {/* Ne rien faire de plus */}
+         D360Calendar(const string& dateStr) : AbstractCalendar("D360", dateStr)
+         {/* Ne rien faire de plus */}
 
          virtual int getYearTotalLength(const Date& d) const { return (360 * 86400); }
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/calendar_utils.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/calendar_utils.hpp	(revision 118)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/calendar_utils.hpp	(revision 119)
@@ -4,7 +4,38 @@
 namespace XMLIOSERVER
 {
-
    Date Date::FromString(const string& str, const AbstractCalendar& cal)
    { Date dt(cal); std::istringstream iss(str); iss >> dt; return dt; }
+
+   bool Date::checkDate(void)
+   {
+      bool retValue = true;
+
+      // VÃ©rificatio de la valeur du mois.
+      if (month  < 1) { retValue = false; month  = 1; }
+      if (month  > relCalendar.getYearLength())
+      { retValue = false; month = relCalendar.getYearLength(); }
+
+      // VÃ©rification de la valeur du jour.
+      if (day    < 1) { retValue = false; month  = 1; }
+      if (day    > relCalendar.getMonthLength(*this))
+      { retValue = false; day = relCalendar.getMonthLength(*this); }
+
+      // VÃ©rification de la valeur de l'heure.
+      if (hour   < 0) { retValue = false; hour  = 0; }
+      if (hour   >= relCalendar.getDayLength())
+      { retValue = false; hour = relCalendar.getDayLength()-1; }
+
+      // VÃ©rification de la valeur des minutes.
+      if (minute < 0) { retValue = false; minute = 0; }
+      if (minute >= relCalendar.getHourLength())
+      { retValue = false; minute = relCalendar.getHourLength()-1; }
+
+      // VÃ©rification de la valeur des secondes.
+      if (second < 0) { retValue = false; month  = 0; }
+      if (second >= relCalendar.getMinuteLength())
+      { retValue = false; second = relCalendar.getMinuteLength()-1; }
+
+      return retValue;
+   }
 
    Duration& Duration::resolve(const AbstractCalendar& c)
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/context.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/context.hpp	(revision 118)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/context.hpp	(revision 119)
@@ -9,7 +9,10 @@
       public:
 
-         Context(void) : ObjectTemplate<Context>(), fieldDef(NULL), fileDef(NULL), axisDef(NULL), gridDef(NULL)
+         Context(void) : ObjectTemplate<Context>(), ccalendar(NULL),
+            fieldDef(NULL), fileDef(NULL), axisDef(NULL), gridDef(NULL)
          {/* Ne rien faire de plus */}
-         Context(const string& _id) : ObjectTemplate<Context>(_id), fieldDef(NULL), fileDef(NULL), axisDef(NULL), gridDef(NULL)
+
+         Context(const string& _id) : ObjectTemplate<Context>(_id), ccalendar(NULL),
+            fieldDef(NULL), fileDef(NULL), axisDef(NULL), gridDef(NULL)
          {/* Ne rien faire de plus */}
 
@@ -92,8 +95,8 @@
                   { WARNING("Le noeud de dÃ©finition possÃšde un identifiant, ce dernier ne sera pas pris en compte lors du traitement !"); }
 
-                  if (name.compare(FieldDefinition::GetDefName()) == 0) // Parsing dÃ©finition des champs.
+                  if (name.compare(FieldDefinition::GetDefName()) == 0) // Parsing pour la dÃ©finition des champs.
                   { fieldDef = CreateInstanceAndParse<FieldDefinition>(_node, FieldDefinition::GetDefName().c_str()); continue; }
 
-                  if (name.compare(FileDefinition::GetDefName()) == 0) // Parsing dÃ©finition des fichiers.
+                  if (name.compare(FileDefinition::GetDefName()) == 0) // Parsing pour la dÃ©finition des fichiers.
                   { fileDef  = CreateInstanceAndParse<FileDefinition >(_node, FileDefinition ::GetDefName().c_str()); continue; }
 
@@ -136,19 +139,42 @@
          }
 
-         FieldDefinition* getFieldDefinition(void) { return (this->fieldDef); }
-         FileDefinition * getFileDefinition(void)  { return (this->fileDef ); }
-         AxisDefinition * getAxisDefinition(void)  { return (this->axisDef ); }
-         GridDefinition * getGridDefinition(void)  { return (this->gridDef ); }
+         FieldDefinition* getFieldDefinition(void) const { return (this->fieldDef); }
+         FileDefinition * getFileDefinition(void)  const { return (this->fileDef ); }
+         AxisDefinition * getAxisDefinition(void)  const { return (this->axisDef ); }
+         GridDefinition * getGridDefinition(void)  const { return (this->gridDef ); }
+
+         AbstractCalendar * getCalendar(void) const { return (this->ccalendar ); }
+         AbstractCalendar * setCalendar(const string& _calName, const string& dateStr)
+         {
+            if (_calName.compare("D360")      == 0)
+               return (ccalendar = new D360Calendar(dateStr));
+            if (_calName.compare("AllLeap")   == 0)
+               return (ccalendar = new AllLeapCalendar(dateStr));
+            if (_calName.compare("NoLeap")    == 0)
+               return (ccalendar = new NoLeapCalendar(dateStr));
+            if (_calName.compare("Julian")    == 0)
+               return (ccalendar = new JulianCalendar(dateStr));
+            if (_calName.compare("Gregorian") == 0)
+               return (ccalendar = new GregorianCalendar(dateStr));
+
+            WARNING("L'identifiant "+_calName+" est inconnu, le calendrier grÃ©gorien sera choisi par dÃ©fault pour le contexte "+getId());
+
+            return (ccalendar = new GregorianCalendar(dateStr));
+         }
 
          ~Context()
          {
+            // DÃ©sallocation dynamique de mÃ©moire pour chacun des groupes de dÃ©finition si nÃ©cessaire.
             if(fieldDef != NULL) delete fieldDef;
             if(fileDef  != NULL) delete fileDef;
             if(axisDef  != NULL) delete axisDef;
             if(gridDef  != NULL) delete gridDef;
+            // DÃ©sallocation dynamique de mÃ©moire pour le calendrier associÃ© au contexte courant si nÃ©cessaire.
+            if(ccalendar !=  NULL) delete ccalendar;
          }
 
+      private:
 
-      private:
+         AbstractCalendar* ccalendar;
 
          FieldDefinition*  fieldDef;
@@ -157,5 +183,4 @@
          GridDefinition*   gridDef;
 
-
    }; //class Context
 }// namespace XMLIOSERVER
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/date.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/date.hpp	(revision 118)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/date.hpp	(revision 119)
@@ -8,13 +8,20 @@
       public :
 
-         Date(const AbstractCalendar& cal, int yr = 0, int mth = 0, int d = 0, int hr = 0, int min = 0 , int sec = 0) : relCalendar(cal)
+         Date(const AbstractCalendar& cal, int yr = 0, int mth = 1, int d = 1, int hr = 0, int min = 0 , int sec = 0) : relCalendar(cal)
             , year(yr), month(mth), day(d), hour(hr), minute(min), second(sec)
-         {/* Ne rien faire de plus */}
+         {
+            if(!checkDate())
+               WARNING("La date initialisÃ©e a Ã©tÃ© modifiÃ©e car elle Ã©tait incorrecte par rapport au calendrier souhaitÃ©.");
+         }
 
          Date(const Date& d) : relCalendar(d.relCalendar)
             , year(d.year), month(d.month), day(d.day), hour(d.hour), minute(d.minute), second(d.second)
-         {/* Ne rien faire de plus */}
+         {
+            if(!checkDate())
+               WARNING("La date initialisÃ©e a Ã©tÃ© modifiÃ©e car elle Ã©tait incorrecte par rapport au calendrier souhaitÃ©.");
+         }
 
          operator Time(void); // Retourne le nombre de secondes Ã©coulÃ©es depuis la date initiale dÃ©finie dans le calendrier.
+         bool checkDate(void); // VÃ©rifie la validitÃ© de la date.
 
          friend std::ostream& operator<<(std::ostream& out, const Date& d)
@@ -30,4 +37,6 @@
             in >> d.day  >> c >> d.month  >> c >> d.year   >> c;
             in >> d.hour >> c >> d.minute >> c >> d.second;
+            if(!d.checkDate())
+               WARNING("La date initialisÃ©e (depuis une chaÃ®ne de caractÃšres) a Ã©tÃ© modifiÃ©e car elle Ã©tait incorrecte par rapport au calendrier souhaitÃ©.");
             return (in);
          }
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/duration.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/duration.hpp	(revision 118)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/duration.hpp	(revision 119)
@@ -10,14 +10,61 @@
    typedef struct _duration
    {
-      friend std::ostream& operator<<(std::ostream& out, const struct _duration& d)
-      {
-         out << d.year  << "y. " << d.month  << "mo. "   <<  d.day   << "d. "
-             << d.hour  << "h. " << d.minute << "min. " << d.second << "sec. ";
-         return (out);
-      }
+      public :
 
-      struct _duration& resolve(const AbstractCalendar&);
+         friend std::ostream& operator<<(std::ostream& out, const struct _duration& d)
+         {
+            bool testValue = true;
+            if(d.year   != 0.0) { testValue = false; out << d.year   << "y " ; }
+            if(d.month  != 0.0) { testValue = false; out << d.month  << "mo "; }
+            if(d.day    != 0.0) { testValue = false; out << d.day    << "d " ; }
+            if(d.hour   != 0.0) { testValue = false; out << d.hour   << "h " ; }
+            if(d.minute != 0.0) { testValue = false; out << d.minute << "mi "; }
+            if(d.second != 0.0 || testValue) { out << d.second << "s " ; }
+            return (out);
+         }
 
-      double year, month, day, hour, minute, second;
+         friend std::istream& operator>>(std::istream& in, struct _duration& d)
+         {
+            double v = 1.0;
+            char   c = '/';
+            while (!in.eof())
+            {
+               in >> v >> c;
+               switch (c)
+               {
+                  case 'y': d.year   = v; continue;
+                  case 'd': d.day    = v; continue;
+                  case 'h': d.hour   = v; continue;
+                  case 's': d.second = v; continue;
+                  case 'm':
+                     in >> c;
+                     if (c == 'i') d.minute   = v;
+                     else if(c == 'o') d.month   = v;
+                     else
+                     {
+                        string valc("m"); valc.append(1, c);
+                        WARNING("La chaine \""+valc+"\" ne permet pas de dÃ©finir une unitÃ© de durÃ©e.");
+                        continue;
+                     }
+                     continue;
+                  default:
+                     string valc; valc.append(1, c);
+                     WARNING("La chaine \""+valc+"\" ne permet pas de dÃ©finir une unitÃ© de durÃ©e.");
+                     continue;
+               }
+            }
+            return (in);
+         }
+
+         static struct _duration FromString(const string& str)
+         {
+            struct _duration dr = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
+            std::istringstream iss(str);
+            iss >> dr; return dr;
+         }
+
+         struct _duration& resolve(const AbstractCalendar&);
+
+         double year, month, day, hour, minute, second;
 
    } Duration;
@@ -26,4 +73,5 @@
    static const Duration Year   = {1.0, 0.0, 0.0, 0.0, 0.0, 0.0},
                          Month  = {0.0, 1.0, 0.0, 0.0, 0.0, 0.0},
+                         Week   = {0.0, 0.0, 7.0, 0.0, 0.0, 0.0},
                          Day    = {0.0, 0.0, 1.0, 0.0, 0.0, 0.0},
                          Hour   = {0.0, 0.0, 0.0, 1.0, 0.0, 0.0},
