Ignore:
Timestamp:
Nov 8, 2005, 5:13:56 PM (20 years ago)
Author:
ansari
Message:

Amelioration classe TimeStamp - prise en charge format YYYY-MM-DDThh:mm:ss
et TimeStamp rendu PPersist - Reza 8/11/2005

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/BaseTools/timestamp.cc

    r2826 r2830  
    7474}
    7575
    76 TimeStamp::TimeStamp(string& date, string& hour)
     76TimeStamp::TimeStamp(string const & date, string const & hour)
    7777{
    7878  SetDate(date);
     
    8686}
    8787
     88TimeStamp::TimeStamp(string& datim)
     89{
     90  Set(datim);
     91}
     92
     93TimeStamp::TimeStamp(const char* datim)
     94{
     95  Set(datim);
     96}
    8897
    8998void TimeStamp::Set(TimeStamp const & ts)
     
    96105{
    97106  if (days >= 0.) {
    98     mDays = trunc(days);
     107    mDays = (int_8)trunc(days);
    99108    mSeconds = (days-trunc(days))*86400.;
    100109  }
    101110  else {
    102111    if ( (trunc(days)-days) > 0.) {
    103       mDays = trunc(days)-1;
     112      mDays = (int_8)trunc(days)-1;
    104113      mSeconds = (days-mDays)*86400.;
    105114    }
    106115    else {
    107       mDays = trunc(days);
     116      mDays = (int_8)trunc(days);
    108117      mSeconds = 0.;
    109118    }
     
    116125    throw ParmError("TimeStamp::Set(int_8, r_8) seconds<0 or seconds>86400.");
    117126  mDays = days;
    118 }
     127  mSeconds = seconds;
     128}
     129
     130void 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
    119141
    120142void TimeStamp::SetNow()
     
    193215{
    194216  double seconds = mSeconds;
    195   hour = trunc(seconds/3600.);
     217  hour = (int)trunc(seconds/3600.);
    196218  seconds -= hour*3600;
    197   min = trunc(seconds/60.);
     219  min = (int)trunc(seconds/60.);
    198220  while (min >= 60) { hour++; min -= 60; }
    199221  sec = seconds-min*60;
     
    207229
    208230/*!
    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
    211236*/
    212 string TimeStamp::ToString(bool fgday, bool fghour) const
     237string TimeStamp::ToString(StrFmt fmt) const
    213238{
    214239  char buff[128];
     
    218243  GetDate(aa, mm, jj);
    219244  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  }
    226255  return buff;
    227256}
    228257
    229258/*!
    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
    232264*/
    233 void TimeStamp::Print(ostream& os, bool fgday, bool fghour)  const
    234 {
    235   os << " " << ToString(fgday, fghour) << " ";
     265void TimeStamp::Print(ostream& os, StrFmt fmt)  const
     266{
     267  os << " " << ToString(fmt) << " ";
    236268}
    237269
     
    280312  return t;
    281313}
     314
     315//----------------------------------------------------------
     316// Classe pour la gestion de persistance
     317// ObjFileIO<TimeStamp>
     318//----------------------------------------------------------
     319
     320/* --Methode-- */
     321DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
     322void        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-- */
     334DECL_TEMP_SPEC  /* equivalent a template <> , pour SGI-CC en particulier */
     335void        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)
     354template class ObjFileIO<TimeStamp>;
     355#endif
Note: See TracChangeset for help on using the changeset viewer.