17 #define epicsExportSharedSymbols 22 namespace epics {
namespace pvData {
30 : secondsPastEpoch(secondsPastEpoch),nanoseconds(nanoseconds),userTag(userTag)
37 if(nanoseconds>=0 && nanoseconds<nanoSecPerSec)
return;
38 while(nanoseconds>=nanoSecPerSec) {
42 while(nanoseconds<0) {
53 nanoseconds = epicsTime.
nsec;
60 epicsTime.
nsec = nanoseconds;
66 secondsPastEpoch = milliseconds/1000;
67 nanoseconds = (milliseconds%1000)*1000000;
76 nanoseconds = epicsTime.
nsec;
81 double value =
static_cast<double>(secondsPastEpoch);
82 double nano = nanoseconds;
89 int64 sl = left.secondsPastEpoch;
90 int32 nl = left.nanoseconds;
91 int64 sr = right.secondsPastEpoch;
92 int32 nr = right.nanoseconds;
93 int64 sdiff = sl - sr;
101 int64 sdiff = diffInt(*
this,right);
102 if(sdiff==0)
return true;
108 int64 sdiff = diffInt(*
this,right);
109 if(sdiff!=0)
return true;
115 int64 sdiff = diffInt(*
this,right);
116 if(sdiff<=0)
return true;
122 int64 sdiff = diffInt(*
this,right);
123 if(sdiff<0)
return true;
129 int64 sdiff = diffInt(*
this,right);
130 if(sdiff>=0)
return true;
136 int64 sdiff = diffInt(*
this,right);
137 if(sdiff>0)
return true;
143 double result =
static_cast<double>(a.secondsPastEpoch - b.secondsPastEpoch);
144 result += (a.nanoseconds - b.nanoseconds)/1e9;
151 secondsPastEpoch += seconds;
157 secondsPastEpoch -= seconds;
164 int64 nano =
static_cast<int64>((seconds - secs)*1e9);
165 nanoseconds +=
static_cast<int32>(nano);
166 if(nanoseconds>nanoSecPerSec) {
168 secondsPastEpoch += 1;
169 }
else if(nanoseconds<-nanoSecPerSec) {
171 secondsPastEpoch -= 1;
173 secondsPastEpoch += secs;
184 return secondsPastEpoch*1000 + nanoseconds/1000000;
epicsShareExtern const int32 nanoSecPerSec
LIBCOM_API int epicsStdCall epicsTimeFromTime_t(epicsTimeStamp *pDest, time_t src)
Convert ANSI C time_t to epicsTimeStamp.
TimeStamp & operator-=(int64 seconds)
TODO only here because of the Lockable.
epicsUInt32 secPastEpoch
seconds since 0000 Jan 1, 1990
bool operator<=(TimeStamp const &) const
TimeStamp & operator+=(int64 seconds)
LIBCOM_API int epicsStdCall epicsTimeToTime_t(time_t *pDest, const epicsTimeStamp *pSrc)
Convert epicsTimeStamp to ANSI C time_t.
bool operator==(TimeStamp const &) const
void put(int64 secondsPastEpoch, int32 nanoseconds=0)
epicsShareExtern const int32 microSecPerSec
int epicsStdCall epicsTimeGetCurrent(epicsTimeStamp *pDest)
Get current time into *pDest.
epicsShareExtern const int32 milliSecPerSec
#define POSIX_TIME_AT_EPICS_EPOCH
The EPICS Epoch is 00:00:00 Jan 1, 1990 UTC.
bool operator>=(TimeStamp const &) const
bool operator>(TimeStamp const &) const
EPICS time stamp, for use from C code.
static double diff(TimeStamp const &a, TimeStamp const &b)
epicsShareExtern const int64 posixEpochAtEpicsEpoch
bool operator!=(TimeStamp const &) const
EPICS time-stamps (epicsTimeStamp), epicsTime C++ class and C functions for handling wall-clock times...
void toTime_t(time_t &time) const
bool operator<(TimeStamp const &) const
void fromTime_t(const time_t &time)
Methods for manipulating timeStamp.
epicsUInt32 nsec
nanoseconds within second