Changeset 2830 in Sophya for trunk/SophyaLib/BaseTools/timestamp.cc
- Timestamp:
- Nov 8, 2005, 5:13:56 PM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/BaseTools/timestamp.cc
r2826 r2830 74 74 } 75 75 76 TimeStamp::TimeStamp(string & date, string& hour)76 TimeStamp::TimeStamp(string const & date, string const & hour) 77 77 { 78 78 SetDate(date); … … 86 86 } 87 87 88 TimeStamp::TimeStamp(string& datim) 89 { 90 Set(datim); 91 } 92 93 TimeStamp::TimeStamp(const char* datim) 94 { 95 Set(datim); 96 } 88 97 89 98 void TimeStamp::Set(TimeStamp const & ts) … … 96 105 { 97 106 if (days >= 0.) { 98 mDays = trunc(days);107 mDays = (int_8)trunc(days); 99 108 mSeconds = (days-trunc(days))*86400.; 100 109 } 101 110 else { 102 111 if ( (trunc(days)-days) > 0.) { 103 mDays = trunc(days)-1;112 mDays = (int_8)trunc(days)-1; 104 113 mSeconds = (days-mDays)*86400.; 105 114 } 106 115 else { 107 mDays = trunc(days);116 mDays = (int_8)trunc(days); 108 117 mSeconds = 0.; 109 118 } … … 116 125 throw ParmError("TimeStamp::Set(int_8, r_8) seconds<0 or seconds>86400."); 117 126 mDays = days; 118 } 127 mSeconds = seconds; 128 } 129 130 void TimeStamp::Set(const char * datim) 131 { 132 int year, month, day; 133 int hour, min; 134 double sec; 135 sscanf(datim,"%d-%d-%dT%d:%d:%lf", &year, &month, &day, 136 &hour, &min, &sec); 137 SetDate(year, month, day); 138 SetHour(hour, min, sec); 139 } 140 119 141 120 142 void TimeStamp::SetNow() … … 193 215 { 194 216 double seconds = mSeconds; 195 hour = trunc(seconds/3600.);217 hour = (int)trunc(seconds/3600.); 196 218 seconds -= hour*3600; 197 min = trunc(seconds/60.);219 min = (int)trunc(seconds/60.); 198 220 while (min >= 60) { hour++; min -= 60; } 199 221 sec = seconds-min*60; … … 207 229 208 230 /*! 209 \param fgday : if false, ignore the date (dd/mm/yy) part 210 \param fghour : if false, ignore the hour (hh:mm:ss) part 231 \param fmt : String format for the date 232 - FmtPackedDateTime : YYYY-MM-DDThh:mm:ss.s 233 - FmtDateOnly : dd/mm/yyyy 234 - FmtTimeOnly : hh:mm:ss.s 235 - FmtDateTime : dd/mm/yyyy hh:mm:ss.s UT 211 236 */ 212 string TimeStamp::ToString( bool fgday, bool fghour) const237 string TimeStamp::ToString(StrFmt fmt) const 213 238 { 214 239 char buff[128]; … … 218 243 GetDate(aa, mm, jj); 219 244 GetHour(hh, min, sec); 220 if (!fghour) 221 sprintf(buff,"%02d/%02d/%02d ", jj,mm,aa); 222 else if (!fgday) 223 sprintf(buff,"%02d:%02d:%02.3f ", hh,min,sec); 224 else 225 sprintf(buff,"%02d/%02d/%02d %02d:%02d:%02.1f GMT", jj,mm,aa,hh,min,sec); 245 if (fmt == FmtPackedDateTime) 246 sprintf(buff,"%04d-%02d-%02dT%02d:%02d:%02.1f", aa,mm,jj, hh,min,sec); 247 else { 248 if (fmt == FmtDateOnly) 249 sprintf(buff,"%02d/%02d/%04d ", jj,mm,aa); 250 else if (fmt == FmtTimeOnly) 251 sprintf(buff,"%02d:%02d:%02.3f ", hh,min,sec); 252 else 253 sprintf(buff,"%02d/%02d/%04d %02d:%02d:%02.1f UT", jj,mm,aa,hh,min,sec); 254 } 226 255 return buff; 227 256 } 228 257 229 258 /*! 230 \param fgday : if false, ignore the date (dd/mm/yy) part 231 \param fghour : if false, ignore the hour (hh:mm:ss) part 259 \param fmt : String format for the date 260 - FmtPackedDateTime : YYYY-MM-DDThh:mm:ss.s 261 - FmtDateOnly : dd/mm/yyyy 262 - FmtTimeOnly : hh:mm:ss.s 263 - FmtDateTime : dd/mm/yyyy hh:mm:ss.s UT 232 264 */ 233 void TimeStamp::Print(ostream& os, bool fgday, bool fghour) const234 { 235 os << " " << ToString(f gday, fghour) << " ";265 void TimeStamp::Print(ostream& os, StrFmt fmt) const 266 { 267 os << " " << ToString(fmt) << " "; 236 268 } 237 269 … … 280 312 return t; 281 313 } 314 315 //---------------------------------------------------------- 316 // Classe pour la gestion de persistance 317 // ObjFileIO<TimeStamp> 318 //---------------------------------------------------------- 319 320 /* --Methode-- */ 321 DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */ 322 void ObjFileIO<TimeStamp>::WriteSelf(POutPersist& s) const 323 { 324 if (dobj == NULL) 325 throw NullPtrError("ObjFileIO<TimeStamp>::WriteSelf() dobj=NULL"); 326 int_4 ver; 327 ver = 1; 328 s.Put(ver); // Lecture numero de version PPF 329 s.Put(dobj->DaysPart()); 330 s.Put(dobj->SecondsPart()); 331 } 332 333 /* --Methode-- */ 334 DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */ 335 void ObjFileIO<TimeStamp>::ReadSelf(PInPersist& s) 336 { 337 int_4 ver; 338 s.Get(ver); // Lecture numero de version PPF 339 r_8 seconds; 340 int_8 days; 341 s.Get(days); 342 s.Get(seconds); 343 344 if (dobj == NULL) dobj = new TimeStamp(days, seconds); 345 else dobj->Set(days, seconds); 346 } 347 348 349 #ifdef __CXX_PRAGMA_TEMPLATES__ 350 #pragma define_template ObjFileIO<TimeStamp> 351 #endif 352 353 #if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES) 354 template class ObjFileIO<TimeStamp>; 355 #endif
Note:
See TracChangeset
for help on using the changeset viewer.