Changeset 647 for XIOS/branchs


Ignore:
Timestamp:
07/20/15 11:52:26 (9 years ago)
Author:
rlacroix
Message:

Fix a possible overflow when converting a date in seconds since the time origin.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/branchs/xios-1.0/src/date.cpp

    r544 r647  
    118118      CDate::operator Time(void) const // Non vérifiée, pas optimisée ... 
    119119      { 
    120          // Todo : Tester si la date courante est supérieure à la date initiale. 
    121          Time retvalue = - relCalendar.getNbSecond(relCalendar.getTimeOrigin()) 
    122                          + relCalendar.getNbSecond(*this); 
    123  
    124          if ((relCalendar.getId().compare("D360")    == 0) || 
    125              (relCalendar.getId().compare("AllLeap") == 0) || 
    126              (relCalendar.getId().compare("NoLeap")  == 0)) 
    127          return (retvalue + (getYear() - relCalendar.getTimeOrigin().getYear()) 
    128                                        * relCalendar.getYearTotalLength(*this)); 
    129  
    130          for(CDate _d(relCalendar.getTimeOrigin()); 
    131             _d.getYear() < getYear(); _d.setYear(_d.getYear()+1)) 
    132             retvalue += relCalendar.getYearTotalLength(_d); 
    133          return (retvalue); 
     120        const CCalendar& c = getRelCalendar(); 
     121 
     122        // Todo : Tester si la date courante est supérieure à la date initiale. 
     123        Time t = c.getNbSecond(*this) - c.getNbSecond(c.getTimeOrigin()); 
     124 
     125        if (c.getId().compare("D360") == 0 || c.getId().compare("AllLeap") == 0 || c.getId().compare("NoLeap") == 0) 
     126        { 
     127          t += Time(getYear() - c.getTimeOrigin().getYear()) * c.getYearTotalLength(*this); 
     128        } 
     129        else 
     130        { 
     131          for (CDate d(c.getTimeOrigin()); d.getYear() < getYear(); d.setYear(d.getYear() + 1)) 
     132            t += c.getYearTotalLength(d); 
     133        } 
     134 
     135        return t; 
    134136      } 
    135137 
Note: See TracChangeset for help on using the changeset viewer.