Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00029
00030 #ifndef ICL_CORE_TIME_STAMP_H_INCLUDED
00031 #define ICL_CORE_TIME_STAMP_H_INCLUDED
00032
00033 #include "icl_core/ImportExport.h"
00034 #include "icl_core/TimeSpan.h"
00035
00036 #if defined(_IC_BUILDER_BOOST_DATE_TIME_)
00037
00038 namespace boost {
00039 namespace posix_time {
00040 class ptime;
00041 }
00042 }
00043 #endif
00044
00045 #ifdef _IC_BUILDER_OPENSPLICEDDS_
00046 namespace DDS {
00047 struct Time_t;
00048 }
00049 #endif
00050
00051 namespace icl_core {
00052
00053 #ifdef _IC_BUILDER_OPENSPLICEDDS_
00054 struct iTimeStamp;
00055 #endif
00056
00058
00061 class ICL_CORE_IMPORT_EXPORT TimeStamp : protected TimeBase
00062 {
00063 public:
00065 TimeStamp()
00066 : TimeBase()
00067 { }
00068
00070
00071
00073 TimeStamp(uint64_t sec, uint32_t nsec)
00074 : TimeBase(sec, nsec)
00075 { }
00076
00077 TimeStamp(const struct timespec& ts)
00078 : TimeBase(ts)
00079 { }
00080
00081 explicit TimeStamp(time_t timestamp)
00082 : TimeBase(uint64_t(timestamp), 0)
00083 { }
00084
00085 #ifdef _IC_BUILDER_OPENSPLICEDDS_
00086
00087 TimeStamp(const DDS::Time_t& time_stamp);
00088
00090 TimeStamp(const iTimeStamp& time_stamp);
00091
00093 TimeStamp& operator = (const DDS::Time_t& time_stamp);
00094
00096 TimeStamp& operator = (const iTimeStamp& time_stamp);
00097
00099 operator DDS::Time_t ();
00100
00102 operator iTimeStamp ();
00103 #endif
00104
00105 #if defined(_IC_BUILDER_BOOST_DATE_TIME_)
00106
00107 TimeStamp(const boost::posix_time::ptime& ptime_stamp);
00108
00110 TimeStamp& operator = (const boost::posix_time::ptime& ptime_stamp);
00111 #endif
00112
00116 static TimeStamp now();
00117
00119 static TimeStamp futureMSec(uint64_t msec);
00120
00124 static TimeStamp fromIso8601BasicUTC(const String& str);
00125
00127 TimeStamp& fromNow();
00128
00136 void strfTime(char* dest, size_t max_len, const char *format) const;
00144 void strfLocaltime(char* dest, size_t max_len, const char *format) const;
00153 String formatIso8601() const;
00161 String formatIso8601UTC() const;
00170 String formatIso8601Basic() const;
00179 String formatIso8601BasicUTC() const;
00180
00182 #ifdef _IC_BUILDER_DEPRECATED_STYLE_
00183
00188 static ICL_CORE_VC_DEPRECATE_STYLE TimeStamp Now() ICL_CORE_GCC_DEPRECATE_STYLE;
00189
00193 static ICL_CORE_VC_DEPRECATE_STYLE TimeStamp FutureMSec(uint64_t msec) ICL_CORE_GCC_DEPRECATE_STYLE;
00194
00198 ICL_CORE_VC_DEPRECATE_STYLE TimeStamp& FromNow() ICL_CORE_GCC_DEPRECATE_STYLE;
00199
00200 ICL_CORE_VC_DEPRECATE_STYLE void Strftime(char* dest, size_t max_len, const char *format) const
00201 ICL_CORE_GCC_DEPRECATE_STYLE;
00202
00203 ICL_CORE_VC_DEPRECATE_STYLE void StrfLocaltime(char* dest, size_t max_len, const char *format) const
00204 ICL_CORE_GCC_DEPRECATE_STYLE;
00205
00206 ICL_CORE_VC_DEPRECATE_STYLE String FormatIso8601() const
00207 ICL_CORE_GCC_DEPRECATE_STYLE;
00208
00209 #endif
00210
00211
00213 TimeStamp& operator += (const TimeSpan& span)
00214 {
00215 secs+=span.secs;
00216 nsecs+=span.nsecs;
00217 normalizeTime();
00218 return *this;
00219 }
00220
00222 TimeStamp& operator -= (const TimeSpan& span)
00223 {
00224 secs-=span.secs;
00225 nsecs-=span.nsecs;
00226 normalizeTime();
00227 return *this;
00228 }
00229
00233 bool operator != (const TimeStamp& other) const
00234 {
00235 return TimeBase::operator != (other);
00236 }
00237
00241 bool operator == (const TimeStamp& other) const
00242 {
00243 return TimeBase::operator == (other);
00244 }
00245
00250 bool operator < (const TimeStamp& other) const
00251 {
00252 return TimeBase::operator < (other);
00253 }
00254
00258 bool operator > (const TimeStamp& other) const
00259 {
00260 return TimeBase::operator > (other);
00261 }
00262
00267 bool operator <= (const TimeStamp& other) const
00268 {
00269 return TimeBase::operator <= (other);
00270 }
00271
00276 bool operator >= (const TimeStamp& other) const
00277 {
00278 return TimeBase::operator >= (other);
00279 }
00280
00281 uint64_t tsSec() const { return secs; }
00282 uint32_t tsUSec() const { return nsecs/1000; }
00283 uint32_t tsNSec() const { return nsecs; }
00284
00285 static TimeStamp maxTime()
00286 {
00287 return TimeStamp(TimeBase::maxTime());
00288 }
00289
00290 using TimeBase::days;
00291 using TimeBase::hours;
00292 using TimeBase::minutes;
00293 using TimeBase::seconds;
00294 using TimeBase::milliSeconds;
00295 using TimeBase::microSeconds;
00296 using TimeBase::nanoSeconds;
00297
00298 using TimeBase::timespec;
00299 using TimeBase::systemTimespec;
00300
00301 #ifdef _SYSTEM_DARWIN_
00302 using TimeBase::machTimespec;
00303 #endif
00304
00306 #ifdef _IC_BUILDER_DEPRECATED_STYLE_
00307
00308 ICL_CORE_VC_DEPRECATE_STYLE uint64_t TsSec() const ICL_CORE_GCC_DEPRECATE_STYLE;
00309 ICL_CORE_VC_DEPRECATE_STYLE uint32_t TsUSec() const ICL_CORE_GCC_DEPRECATE_STYLE;
00310 ICL_CORE_VC_DEPRECATE_STYLE uint32_t TsNSec() const ICL_CORE_GCC_DEPRECATE_STYLE;
00311
00312 static ICL_CORE_VC_DEPRECATE_STYLE TimeStamp MaxTime() ICL_CORE_GCC_DEPRECATE_STYLE;
00313
00314 using TimeBase::Days;
00315 using TimeBase::Hours;
00316 using TimeBase::Minutes;
00317 using TimeBase::Seconds;
00318 using TimeBase::MilliSeconds;
00319 using TimeBase::MicroSeconds;
00320 using TimeBase::NanoSeconds;
00321
00322 using TimeBase::Timespec;
00323 using TimeBase::SystemTimespec;
00324
00325 #ifdef _SYSTEM_DARWIN_
00326 using TimeBase::MachTimespec;
00327 #endif
00328
00329 #endif
00330
00331
00332 static const TimeStamp cZERO;
00333
00334 private:
00335 TimeStamp(const TimeBase &base)
00336 : TimeBase(base)
00337 { }
00338
00339 TimeStamp& operator += (const TimeStamp& other);
00340 };
00341
00342
00343 inline TimeStamp operator + (const TimeSpan& span, const TimeStamp& time)
00344 {
00345 TimeStamp a(time);
00346 return a += span;
00347 }
00348
00349 inline TimeStamp operator + (const TimeStamp& time, const TimeSpan& span)
00350 {
00351 TimeStamp a(time);
00352 return a += span;
00353 }
00354
00355 inline TimeStamp operator - (const TimeStamp& time, const TimeSpan& span)
00356 {
00357 TimeStamp a(time);
00358 return a -= span;
00359 }
00360
00361 inline TimeSpan operator - (const TimeStamp& time_1, const TimeStamp& time_2)
00362 {
00363 TimeSpan a(time_1.tsSec()-time_2.tsSec(), time_1.tsNSec()-time_2.tsNSec());
00364 return a;
00365 }
00366
00367 }
00368 #endif