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 118)
@@ -0,0 +1,71 @@
+#ifndef __XMLIO_ABSTRACT_CALENDAR__
+#define __XMLIO_ABSTRACT_CALENDAR__
+
+namespace XMLIOSERVER
+{
+   typedef enum _monthEnum
+   {  JAN = 1, FEB = 2, MAR = 3, APR = 4 , MAY = 5 , JUN = 6 ,
+      JUL = 7, AUG = 8, SEP = 9, OCT = 10, NOV = 11, DEC = 12  } MonthEnum;
+
+   class AbstractCalendar : public AbstractObject
+   {
+      public :
+
+         virtual int getMonthLength(const Date& d) const
+         { // Retourne la durÃ©e du mois en jour.
+            static const int NoLeapMonthLength[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
+            return (NoLeapMonthLength[d.getMonth()-1]);
+         }
+
+         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 getMinuteLength(void) const { return (60); } // Retourne la durÃ©e d'une minute en secondes.
+
+         virtual int getNbSecond(const Date& d) const
+         { // Retourne le nombre de secondes Ã©coulÃ©es depuis le dÃ©but de l'annÃ©e.
+            Date _d0(d); int  nbday = 0;
+
+            for(_d0.setMonth(1); _d0.getMonth() < d.getMonth(); _d0.setMonth(_d0.getMonth()+1))
+               nbday += getMonthLength(_d0);
+            //std::cout << "nombre de jours : " << nbday << std::endl;
+            return ((((nbday + d.getDay()) * getDayLength() + d.getHour())
+                     * getHourLength() + d.getMinute()) * getMinuteLength() + d.getSecond());
+         }
+
+         virtual string getMonthName(int _mi) const
+         {
+            static const string Monthname_str[] =
+               { "january", "february", "march"    , "april"  , "may"     , "june"    ,
+                 "july"   , "august"  , "september", "october", "november", "december" };
+            return(Monthname_str[_mi-1]);
+         }
+
+         virtual const string getMonthShortName(int _mi) const
+         { string value = getMonthName(_mi); value.resize(3); return (value); }
+
+         const Date& getInitDate(void) const { return(initDate); }
+         Date& getCurrentDate(void) { return(currentDate); }
+
+         virtual ~AbstractCalendar()
+         {/* Ne rien faire de plus */}
+
+      protected :
+
+         AbstractCalendar() : AbstractObject(), initDate(*this), currentDate(initDate)
+         {/* Ne rien faire de plus */}
+         AbstractCalendar(const string& _id) : AbstractObject(_id), initDate(*this), currentDate(initDate)
+         {/* Ne rien faire de plus */}
+
+      private :
+
+         const Date initDate;
+         Date currentDate;
+
+   }; // class AbstractCalendar
+
+} // namespace XMLIOSERVER
+
+#endif // __XMLIO_ABSTRACT_CALENDAR__
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp	(revision 117)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp	(revision 118)
@@ -28,4 +28,10 @@
       Date ddd(*calendar, 2030, 11, 02, 10, 33, 40) ;
 
+      Date d1 (*calendar, 2007, 11, 12, 00, 00, 00) ;
+      Date d2 (*calendar, 2008, 11, 12, 00, 00, 00) ;
+
+      string sttr("12/07/2005 - 10:11:30");
+      Date d3 = Date::FromString(sttr, *calendar);
+
       // Les mois sont considÃ©rÃ©s comme des entiers mais stockÃ©s comme des flottants.
       Duration sc0 = Second * -65.3 + Minute * 117.5   + Hour * 65.9  + Day * 417.8 + Month * 16.0  - Year * 17.5;
@@ -38,7 +44,6 @@
       std::cout << boolalpha << (calendar->getInitDate() != calendar->getCurrentDate()) << std::endl;
 
-      std::cout << sc0 << std::endl;
-      std::cout << sc1 << std::endl;
-      std::cout << sc1 - sc0 << std::endl;
+      std::cout << (Time)d2 - (Time)(d1 + 365 * Day) << std::endl;
+      std::cout << sc0 << std::endl << sc1 << std::endl << sc1 - sc0 << std::endl;
       std::cout << ddd - dd << std::endl;
       std::cout << dd << std::endl;
@@ -47,4 +52,5 @@
 
       std::cout << (dd+sc2) << std::endl;
+      std::cout << (d3) << std::endl;
 
       delete calendar;
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/calendar.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/calendar.hpp	(revision 117)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/calendar.hpp	(revision 118)
@@ -2,72 +2,6 @@
 #define __XMLIO_CALENDAR__
 
-#include "date.hpp"
-
 namespace XMLIOSERVER
 {
-
-   typedef enum _monthEnum
-   {  JAN = 1, FEB = 2, MAR = 3, APR = 4 , MAY = 5 , JUN = 6 ,
-      JUL = 7, AUG = 8, SEP = 9, OCT = 10, NOV = 11, DEC = 12  } MonthEnum;
-
-   class AbstractCalendar : public AbstractObject
-   {
-      public :
-
-         virtual int getMonthLength(const Date& d) const
-         { // Retourne la durÃ©e du mois en jour.
-            static const int NoLeapMonthLength[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
-            return (NoLeapMonthLength[d.getMonth()-1]);
-         }
-
-         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 getMinuteLength(void) const { return (60); } // Retourne la durÃ©e d'une minute en secondes.
-
-         virtual int getNbSecond(const Date& d) const
-         { // Retourne le nombre de secondes Ã©coulÃ©es depuis le dÃ©but de l'annÃ©e.
-            Date _d0(d); int  nbday = 0;
-
-            for(_d0.setMonth(1); _d0.getMonth() < d.getMonth(); _d0.setMonth(_d0.getMonth()+1))
-               nbday += getMonthLength(_d0);
-            //std::cout << "nombre de jours : " << nbday << std::endl;
-            return ((((nbday + d.getDay()) * getDayLength() + d.getHour())
-                     * getHourLength() + d.getMinute()) * getMinuteLength() + d.getSecond());
-         }
-
-         virtual string getMonthName(int _mi) const
-         {
-            static const string Monthname_str[] =
-               { "january", "february", "march"    , "april"  , "may"     , "june"    ,
-                 "july"   , "august"  , "september", "october", "november", "december" };
-            return(Monthname_str[_mi-1]);
-         }
-
-         virtual const string getMonthShortName(int _mi) const
-         { string value = getMonthName(_mi); value.resize(3); return (value); }
-
-         const Date& getInitDate(void) const { return(initDate); }
-         Date& getCurrentDate(void) { return(currentDate); }
-
-         virtual ~AbstractCalendar()
-         {/* Ne rien faire de plus */}
-
-      protected :
-
-         AbstractCalendar() : AbstractObject(), initDate(*this), currentDate(initDate)
-         {/* Ne rien faire de plus */}
-         AbstractCalendar(const string& _id) : AbstractObject(_id), initDate(*this), currentDate(initDate)
-         {/* Ne rien faire de plus */}
-
-      private :
-
-         const Date initDate;
-         Date currentDate;
-
-   }; // class AbstractCalendar
-
    class JulianCalendar : public AbstractCalendar
    {
@@ -141,5 +75,5 @@
          { if (d.getMonth() == 2) return (29); return AbstractCalendar::getMonthLength(d); }
 
-         virtual int getYearTotalLength(const Date& d) const { return (366 * 86400); } // Retourne la durÃ©e d'une annÃ©e en seconde.
+         virtual int getYearTotalLength(const Date& d) const { return (366 * 86400); }
 
          virtual ~AllLeapCalendar()
@@ -154,5 +88,5 @@
          {/* Ne rien faire de plus */}
 
-         virtual int getYearTotalLength(const Date& d) const { return (360 * 86400); } // Retourne la durÃ©e d'une annÃ©e en seconde.
+         virtual int getYearTotalLength(const Date& d) const { return (360 * 86400); }
          virtual int getMonthLength(const Date& d) const { return (30); }
 
@@ -162,96 +96,4 @@
    }; // class D360Calendar
 
-
-   ////////////////////////////////////////
-
-   Duration& Duration::resolve(const AbstractCalendar& c)
-   {
-      // Simplification de l'Ã©criture des minutes.
-      second += modf(minute, &minute) * (float)c.getMinuteLength();
-      minute += int(second)/c.getMinuteLength(); second = int(second)%c.getMinuteLength();
-
-      // Simplification de l'Ã©criture des heures.
-      minute += modf(hour , &hour) * (float)c.getHourLength();
-      hour   += int(minute)/c.getHourLength(); minute = int(minute)%c.getHourLength();
-
-      // Simplification de l'Ã©criture des jours.
-      hour   += modf(day, &day) * (float)c.getDayLength();
-      day    += int(hour)  /c.getDayLength(); hour   = int(hour)%c.getDayLength();
-
-      // > Aucune Ã©quivalence jour - mois fixÃ©e par avance. //
-
-      // Simplification de l'Ã©criture des annÃ©es.
-      month  += modf(year, &year) * (float)c.getYearLength();
-      year   += int(month) /c.getYearLength(); month  = int(month)%c.getYearLength();
-      return (*this);
-   }
-
-   Date::operator Time(void) // Non vÃ©rifiÃ©e, pas optimisÃ©e ...
-   {
-      // Todo : Tester si la date courante est supÃ©rieure Ã  la date initiale.
-      Time retvalue = - relCalendar.getNbSecond(relCalendar.getInitDate())
-                      + relCalendar.getNbSecond(*this);
-
-      if ((relCalendar.getId().compare("D360")    == 0) ||
-          (relCalendar.getId().compare("AllLeap") == 0) ||
-          (relCalendar.getId().compare("NoLeap")  == 0))
-      return (retvalue + (getYear() - relCalendar.getInitDate().getYear()) * relCalendar.getYearTotalLength(*this));
-
-      for(Date _d(relCalendar.getInitDate()); _d.getYear() < getYear(); _d.setYear(_d.getYear()+1))
-         retvalue += relCalendar.getYearTotalLength(_d);
-      return (retvalue);
-   }
-
-   Date operator+(const Date& dt, const Duration& dr) // Non testÃ©e.
-   {
-      Duration drr (dr);
-      int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0;
-      const AbstractCalendar& c = dt.getRelCalendar();
-
-      drr.resolve(dt.getRelCalendar());
-
-      // Ajustement des minutes par rapport aux secondes.
-      second += dt.getSecond() + drr.second;
-      if (second <  0) { minute --; second += c.getMinuteLength(); }
-      if (second >= c.getMinuteLength()) { minute ++; second -= c.getMinuteLength(); }
-
-      // Ajustement des heures en fonction des minutes.
-      minute += dt.getMinute() + drr.minute;
-      if (minute < 0) { hour --; minute += c.getHourLength(); }
-      if (minute >= c.getHourLength()) { hour ++; minute -= c.getHourLength(); }
-
-      // Ajustement des jours en fonction des heures.
-      hour += dt.getHour() + drr.hour;
-      if (hour <  0) { drr.day --; hour += c.getDayLength(); }
-      if (hour >= c.getDayLength()) { drr.day ++; hour -= c.getDayLength(); }
-
-      // Ajustement des mois en fonction des jours.
-      int signVal = drr.day/fabs(drr.day);
-      Date dtt(dt); dtt.addMonth (signVal);
-
-      for(; c.getMonthLength(dtt) < fabs(drr.day); dtt.addMonth (signVal))
-      { drr.day -= signVal * c.getMonthLength(dtt); drr.month += signVal; }
-
-      day += dt.getDay() + drr.day;
-      if (day <  0) { drr.month --; day += c.getMonthLength(dtt); }
-      if (day >= c.getMonthLength(dtt)) { drr.month ++; day -= c.getMonthLength(dtt); } // << ProblÃšme ici
-      if (day == 0) day = c.getMonthLength(dtt);
-
-      drr.resolve(dt.getRelCalendar());
-
-      // Ajustement des annÃ©es en fonction des mois.
-      month += dt.getMonth() + drr.month;
-      if (month <  0) { year --; month += c.getYearLength(); }
-      if (month >= c.getYearLength()) { year ++; month -= c.getYearLength(); }
-      if (month == 0) month = c.getYearLength();
-
-      year += dt.getYear() + drr.year;
-
-      return (Date(dt.getRelCalendar(), year, month, day, hour, minute, second));
-   }
-
-   Date operator-(const Date& dt, const Duration& dr) { return (dt + (-dr)); }
-
-
 } // namespace XMLIOSERVER
 
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 118)
@@ -0,0 +1,166 @@
+#ifndef __XMLIO_CALENDAR_UTILS__
+#define __XMLIO_CALENDAR_UTILS__
+
+namespace XMLIOSERVER
+{
+
+   Date Date::FromString(const string& str, const AbstractCalendar& cal)
+   { Date dt(cal); std::istringstream iss(str); iss >> dt; return dt; }
+
+   Duration& Duration::resolve(const AbstractCalendar& c)
+   {
+      // Simplification de l'Ã©criture des minutes.
+      second += modf(minute, &minute) * (float)c.getMinuteLength();
+      minute += int(second)/c.getMinuteLength(); second = int(second)%c.getMinuteLength();
+
+      // Simplification de l'Ã©criture des heures.
+      minute += modf(hour , &hour) * (float)c.getHourLength();
+      hour   += int(minute)/c.getHourLength(); minute = int(minute)%c.getHourLength();
+
+      // Simplification de l'Ã©criture des jours.
+      hour   += modf(day, &day) * (float)c.getDayLength();
+      day    += int(hour)  /c.getDayLength(); hour   = int(hour)%c.getDayLength();
+
+      // > Aucune Ã©quivalence jour - mois fixÃ©e par avance. //
+
+      // Simplification de l'Ã©criture des annÃ©es.
+      month  += modf(year, &year) * (float)c.getYearLength();
+      year   += int(month) /c.getYearLength(); month  = int(month)%c.getYearLength();
+      return (*this);
+   }
+
+   Duration operator*(const Duration& ddr, const double& scal)
+   {
+      Duration dur(ddr);
+      dur.year *= scal;  dur.month  *= scal; dur.day    *= scal;
+      dur.hour *= scal;  dur.minute *= scal; dur.second *= scal;
+      return (dur);
+   }
+
+   Duration operator*(const double& scal, const Duration& ddr)
+   { return (ddr * scal); }
+
+   Duration operator-(const Duration& ddr, const Duration& dr)
+   {
+      Duration dur(ddr);
+      dur.year -= dr.year;  dur.month  -= dr.month ; dur.day    -= dr.day;
+      dur.hour -= dr.hour;  dur.minute -= dr.minute; dur.second -= dr.second;
+      return (dur);
+   }
+
+   Duration operator-(const Duration& ddr)
+   {
+      Duration dur(ddr);
+      dur.year = -dur.year;  dur.month  = -dur.month ; dur.day    = -dur.day;
+      dur.hour = -dur.hour;  dur.minute = -dur.minute; dur.second = -dur.second;
+      return (dur);
+   }
+
+   Duration operator+(const Duration& ddr, const Duration& dr)
+   {
+      Duration dur(ddr);
+      dur.year += dr.year;  dur.month  += dr.month ; dur.day    += dr.day;
+      dur.hour += dr.hour;  dur.minute += dr.minute; dur.second += dr.second;
+      return (dur);
+   }
+
+   Date::operator Time(void) // Non vÃ©rifiÃ©e, pas optimisÃ©e ...
+   {
+      // Todo : Tester si la date courante est supÃ©rieure Ã  la date initiale.
+      Time retvalue = - relCalendar.getNbSecond(relCalendar.getInitDate())
+                      + relCalendar.getNbSecond(*this);
+
+      if ((relCalendar.getId().compare("D360")    == 0) ||
+          (relCalendar.getId().compare("AllLeap") == 0) ||
+          (relCalendar.getId().compare("NoLeap")  == 0))
+      return (retvalue + (getYear() - relCalendar.getInitDate().getYear()) * relCalendar.getYearTotalLength(*this));
+
+      for(Date _d(relCalendar.getInitDate()); _d.getYear() < getYear(); _d.setYear(_d.getYear()+1))
+         retvalue += relCalendar.getYearTotalLength(_d);
+      return (retvalue);
+   }
+
+   Date operator+(const Date& dt, const Duration& dr) // Non testÃ©e.
+   {
+      Duration drr (dr);
+      int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0;
+      const AbstractCalendar& c = dt.getRelCalendar();
+
+      drr.resolve(dt.getRelCalendar());
+
+      // Ajustement des minutes par rapport aux secondes.
+      second += dt.getSecond() + drr.second;
+      if (second <  0) { minute --; second += c.getMinuteLength(); }
+      if (second >= c.getMinuteLength()) { minute ++; second -= c.getMinuteLength(); }
+
+      // Ajustement des heures en fonction des minutes.
+      minute += dt.getMinute() + drr.minute;
+      if (minute < 0) { hour --; minute += c.getHourLength(); }
+      if (minute >= c.getHourLength()) { hour ++; minute -= c.getHourLength(); }
+
+      // Ajustement des jours en fonction des heures.
+      hour += dt.getHour() + drr.hour;
+      if (hour <  0) { drr.day --; hour += c.getDayLength(); }
+      if (hour >= c.getDayLength()) { drr.day ++; hour -= c.getDayLength(); }
+
+      // Ajustement des mois en fonction des jours.
+      int signVal = drr.day/fabs(drr.day);
+      Date dtt(dt); dtt.addMonth (signVal);
+
+      for(; c.getMonthLength(dtt) < fabs(drr.day); dtt.addMonth (signVal))
+      { drr.day -= signVal * c.getMonthLength(dtt); drr.month += signVal; }
+
+      day += dt.getDay() + drr.day;
+      if (day <  0) { drr.month --; day += c.getMonthLength(dtt); }
+      if (day >= c.getMonthLength(dtt)) { drr.month ++; day -= c.getMonthLength(dtt); } // << ProblÃšme ici
+      if (day == 0) day = c.getMonthLength(dtt);
+
+      drr.resolve(dt.getRelCalendar());
+
+      // Ajustement des annÃ©es en fonction des mois.
+      month += dt.getMonth() + drr.month;
+      if (month <  0) { year --; month += c.getYearLength(); }
+      if (month >= c.getYearLength()) { year ++; month -= c.getYearLength(); }
+      if (month == 0) month = c.getYearLength();
+
+      year += dt.getYear() + drr.year;
+
+      return (Date(dt.getRelCalendar(), year, month, day, hour, minute, second));
+   }
+
+   Date operator-(const Date& dt, const Duration& dr) { return (dt + (-dr)); }
+
+   Duration operator-(const Date& dt0, const Date& dt1)
+   {
+      // TODO :: VÃ©rifier que les deux dates (dt0 et dt1) ont une rÃ©fÃ©rence vers le mÃªme calendrier.
+      Duration dur =
+      { dt0.getYear() - dt1.getYear(), dt0.getMonth()  - dt1.getMonth() , dt0.getDay()    - dt1.getDay(),
+        dt0.getHour() - dt1.getHour(), dt0.getMinute() - dt1.getMinute(), dt0.getSecond() - dt1.getSecond() };
+      return (dur.resolve(dt0.getRelCalendar()));
+   }
+
+   /// Les opÃ©rateurs de comparaison. (Non testÃ©s pour le moment)
+   bool operator==(const Date& dt0, const Date& dt1)
+   {
+      // TODO :: VÃ©rifier que les deux dates (dt0 et dt1) ont une rÃ©fÃ©rence vers le mÃªme calendrier.
+      return ((dt0.getYear() == dt1.getYear()) && (dt0.getMonth()  == dt1.getMonth())  && (dt1.getDay()    == dt0.getDay()) &&
+              (dt0.getHour() == dt1.getHour()) && (dt0.getMinute() == dt1.getMinute()) && (dt1.getSecond() == dt0.getSecond()));
+   }
+
+   bool operator<(const Date& dt0, const Date& dt1)
+   {
+      // TODO :: VÃ©rifier que les deux dates (dt0 et dt1) ont une rÃ©fÃ©rence vers le mÃªme calendrier.
+      if (dt0.getYear()   < dt1.getYear())   return true; if (dt0.getMonth()  < dt1.getMonth())  return true;
+      if (dt0.getDay()    < dt1.getDay())    return true; if (dt0.getHour()   < dt1.getHour())   return true;
+      if (dt0.getMinute() < dt1.getMinute()) return true; if (dt0.getSecond() < dt1.getSecond()) return true;
+      return false;
+   }
+
+   bool operator!=(const Date& dt0, const Date& dt1) { return !(dt1 == dt0); }
+   bool operator> (const Date& dt0, const Date& dt1) { return (dt1 < dt0); }
+   bool operator>=(const Date& dt0, const Date& dt1) { return ((dt1 > dt0) || (dt1 == dt0)); }
+   bool operator<=(const Date& dt0, const Date& dt1) { return ((dt1 < dt0) || (dt1 == dt0)); }
+
+} // namespace XMLIOSERVER
+
+#endif //__XMLIO_CALENDAR_UTILS__
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/date.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/date.hpp	(revision 117)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/date.hpp	(revision 118)
@@ -4,71 +4,4 @@
 namespace XMLIOSERVER
 {
-   class AbstractCalendar;
-
-   typedef long long int Time;
-
-   typedef struct _duration
-   {
-      /// MÃ©thodes associÃ©es Ã  la structure 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);
-      }
-
-      struct _duration& resolve(const AbstractCalendar&);
-
-      /// PropriÃ©tÃ©s associÃ©es Ã  la structure.
-      double year, month, day, hour, minute, second;
-
-   } Duration;
-
-   /// OpÃ©rateurs associÃ©s Ã  la structure Duration.
-   Duration operator*(const Duration& ddr, const double& scal)
-   {
-      Duration dur(ddr);
-      dur.year *= scal;  dur.month  *= scal; dur.day    *= scal;
-      dur.hour *= scal;  dur.minute *= scal; dur.second *= scal;
-      return (dur);
-   }
-
-   Duration operator*(const double& scal, const Duration& ddr)
-   { return (ddr * scal); }
-
-   Duration operator-(const Duration& ddr, const Duration& dr)
-   {
-      Duration dur(ddr);
-      dur.year -= dr.year;  dur.month  -= dr.month ; dur.day    -= dr.day;
-      dur.hour -= dr.hour;  dur.minute -= dr.minute; dur.second -= dr.second;
-      return (dur);
-   }
-
-   Duration operator-(const Duration& ddr)
-   {
-      Duration dur(ddr);
-      dur.year = -dur.year;  dur.month  = -dur.month ; dur.day    = -dur.day;
-      dur.hour = -dur.hour;  dur.minute = -dur.minute; dur.second = -dur.second;
-      return (dur);
-   }
-
-   Duration operator+(const Duration& ddr, const Duration& dr)
-   {
-      Duration dur(ddr);
-      dur.year += dr.year;  dur.month  += dr.month ; dur.day    += dr.day;
-      dur.hour += dr.hour;  dur.minute += dr.minute; dur.second += dr.second;
-      return (dur);
-   }
-
-   // Les principales durÃ©es constantes : annÃ©e, mois, jour, ...
-   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},
-                         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},
-                         Minute = {0.0, 0.0, 0.0, 0.0, 1.0, 0.0},
-                         Second = {0.0, 0.0, 0.0, 0.0, 0.0, 1.0};
-
-   ///////////////////////////////////////////////////
-
    class Date
    {
@@ -87,6 +20,6 @@
          friend std::ostream& operator<<(std::ostream& out, const Date& d)
          {
-            out << d.month << "/"   << d.day    << "/"     << d.year   << " - "
-                << d.hour  << "h. " << d.minute << "min. " << d.second << "sec. ";
+            out << d.day  << "/" << d.month  << "/" << d.year   << "-"
+                << d.hour << ":" << d.minute << ":" << d.second;
             return (out);
          }
@@ -94,12 +27,11 @@
          friend std::istream& operator>>(std::istream& in, Date& d) // Non testÃ©e.
          {
-            char c = '/'; // Le caractÃšre c est utilisÃ© pour "recueillir" le sÃ©parateur "/".
-            in >> d.month >> c >> d.day >> c  >> d.year;
-            in.seekg(3, std::ios_base::cur); // On passe la lecture de la chaÃ®ne " - "
-            in >> d.hour;   in.seekg(3, std::ios_base::cur); // On passe la lecture de la chaÃ®ne "h. "
-            in >> d.minute; in.seekg(5, std::ios_base::cur); // On passe la lecture de la chaÃ®ne "min. "
-            in >> d.second; in.seekg(5, std::ios_base::cur); // On passe la lecture de la chaÃ®ne "sec. "
+            char c = '/'; // Le caractÃšre c est utilisÃ© pour "recueillir" les sÃ©parateurs "/" et ":".
+            in >> d.day  >> c >> d.month  >> c >> d.year   >> c;
+            in >> d.hour >> c >> d.minute >> c >> d.second;
             return (in);
          }
+
+         static Date FromString(const string& str, const AbstractCalendar& cal);
 
          /// Divers accesseurs.
@@ -133,35 +65,4 @@
    }; // class Date
 
-   Duration operator-(const Date& dt0, const Date& dt1)
-   {
-      // TODO :: VÃ©rifier que les deux dates (dt0 et dt1) ont une rÃ©fÃ©rence vers le mÃªme calendrier.
-      Duration dur =
-      { dt0.getYear() - dt1.getYear(), dt0.getMonth()  - dt1.getMonth() , dt0.getDay()    - dt1.getDay(),
-        dt0.getHour() - dt1.getHour(), dt0.getMinute() - dt1.getMinute(), dt0.getSecond() - dt1.getSecond() };
-      return (dur.resolve(dt0.getRelCalendar()));
-   }
-
-   /// Les opÃ©rateurs de comparaison. (Non testÃ©s pour le moment)
-   bool operator==(const Date& dt0, const Date& dt1)
-   {
-      // TODO :: VÃ©rifier que les deux dates (dt0 et dt1) ont une rÃ©fÃ©rence vers le mÃªme calendrier.
-      return ((dt0.getYear() == dt1.getYear()) && (dt0.getMonth()  == dt1.getMonth())  && (dt1.getDay()    == dt0.getDay()) &&
-              (dt0.getHour() == dt1.getHour()) && (dt0.getMinute() == dt1.getMinute()) && (dt1.getSecond() == dt0.getSecond()));
-   }
-
-   bool operator<(const Date& dt0, const Date& dt1)
-   {
-      // TODO :: VÃ©rifier que les deux dates (dt0 et dt1) ont une rÃ©fÃ©rence vers le mÃªme calendrier.
-      if (dt0.getYear()   < dt1.getYear())   return true; if (dt0.getMonth()  < dt1.getMonth())  return true;
-      if (dt0.getDay()    < dt1.getDay())    return true; if (dt0.getHour()   < dt1.getHour())   return true;
-      if (dt0.getMinute() < dt1.getMinute()) return true; if (dt0.getSecond() < dt1.getSecond()) return true;
-      return false;
-   }
-
-   bool operator!=(const Date& dt0, const Date& dt1) { return !(dt1 == dt0); }
-   bool operator> (const Date& dt0, const Date& dt1) { return (dt1 < dt0); }
-   bool operator>=(const Date& dt0, const Date& dt1) { return ((dt1 > dt0) || (dt1 == dt0)); }
-   bool operator<=(const Date& dt0, const Date& dt1) { return ((dt1 < dt0) || (dt1 == dt0)); }
-
 } // namespace XMLIOSERVER
 
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 118)
@@ -0,0 +1,35 @@
+#ifndef __XMLIO_DURATION__
+#define __XMLIO_DURATION__
+
+namespace XMLIOSERVER
+{
+   class AbstractCalendar;
+
+   typedef long long int Time;
+
+   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);
+      }
+
+      struct _duration& resolve(const AbstractCalendar&);
+
+      double year, month, day, hour, minute, second;
+
+   } Duration;
+
+   // Les principales durÃ©es constantes : annÃ©e, mois, jour, ...
+   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},
+                         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},
+                         Minute = {0.0, 0.0, 0.0, 0.0, 1.0, 0.0},
+                         Second = {0.0, 0.0, 0.0, 0.0, 0.0, 1.0};
+
+} // namespace XMLIOSERVER
+
+#endif // __XMLIO_DURATION__
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/xmlio.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/xmlio.hpp	(revision 117)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/xmlio.hpp	(revision 118)
@@ -27,5 +27,10 @@
 #include "abstract_object.hpp"
 
+// Gestion du calendrier
+#include "duration.hpp"
+#include "date.hpp"
+#include "abstract_calendar.hpp"
 #include "calendar.hpp"
+#include "calendar_utils.hpp"
 
 #include "xml_node.hpp"
