This is Unofficial EPICS BASE Doxygen Site
epics::pvData::TimeStamp Class Reference

Methods for manipulating timeStamp. More...

#include "timeStamp.h"

Public Member Functions

 TimeStamp ()
 
 TimeStamp (int64 secondsPastEpoch, int32 nanoseconds=0, int32 userTag=0)
 
void normalize ()
 
void fromTime_t (const time_t &time)
 
void toTime_t (time_t &time) const
 
int64 getSecondsPastEpoch () const
 
int64 getEpicsSecondsPastEpoch () const
 
int32 getNanoseconds () const
 
int32 getUserTag () const
 
void setUserTag (int32 userTag)
 
void put (int64 secondsPastEpoch, int32 nanoseconds=0)
 
void put (int64 milliseconds)
 
void getCurrent ()
 
double toSeconds () const
 
bool operator== (TimeStamp const &) const
 
bool operator!= (TimeStamp const &) const
 
bool operator<= (TimeStamp const &) const
 
bool operator< (TimeStamp const &) const
 
bool operator>= (TimeStamp const &) const
 
bool operator> (TimeStamp const &) const
 
TimeStampoperator+= (int64 seconds)
 
TimeStampoperator-= (int64 seconds)
 
TimeStampoperator+= (double seconds)
 
TimeStampoperator-= (double seconds)
 
int64 getMilliseconds ()
 

Static Public Member Functions

static double diff (TimeStamp const &a, TimeStamp const &b)
 

Detailed Description

Methods for manipulating timeStamp.

A timeStamp structure has the following fields:

long secondsPastEpoch
int nanoseconds
int userTag

This is a class that holds values corresponding to the fields in a timeStamp structure. It is meant to be used together with pvTimeStamp which allows values to be copied between an timeStamp structure and this class. This class should not be extended.

Definition at line 43 of file timeStamp.h.

Constructor & Destructor Documentation

epics::pvData::TimeStamp::TimeStamp ( )
inline

Default constructor

Definition at line 48 of file timeStamp.h.

49  :secondsPastEpoch(0), nanoseconds(0), userTag(0) {}
epics::pvData::TimeStamp::TimeStamp ( int64  secondsPastEpoch,
int32  nanoseconds = 0,
int32  userTag = 0 
)

Constructor

Parameters
secondsPastEpochseconds since 1970 UTC
nanosecondsnanoseconds since secondsPastEpoch
userTagapplication specific

Definition at line 29 of file timeStamp.cpp.

30 : secondsPastEpoch(secondsPastEpoch),nanoseconds(nanoseconds),userTag(userTag)
31 {
32  normalize();
33 }

Member Function Documentation

double epics::pvData::TimeStamp::diff ( TimeStamp const &  a,
TimeStamp const &  b 
)
static

Return a-b as a double value with units of seconds.

Parameters
afirst timeStamp
bsecond timeStamp
Returns
time difference in seconds.

Definition at line 141 of file timeStamp.cpp.

142 {
143  double result = static_cast<double>(a.secondsPastEpoch - b.secondsPastEpoch);
144  result += (a.nanoseconds - b.nanoseconds)/1e9;
145  return result;
146 }
pvac::PutEvent result
Definition: clientSync.cpp:117
void epics::pvData::TimeStamp::fromTime_t ( const time_t &  time)

Set timeStamp from standard C time

Parameters
timetime as returned by std::time

Definition at line 48 of file timeStamp.cpp.

49 {
50  epicsTimeStamp epicsTime;
51  epicsTimeFromTime_t(&epicsTime,tt);
52  secondsPastEpoch = epicsTime.secPastEpoch + posixEpochAtEpicsEpoch;
53  nanoseconds = epicsTime.nsec;
54 }
LIBCOM_API int epicsStdCall epicsTimeFromTime_t(epicsTimeStamp *pDest, time_t src)
Convert ANSI C time_t to epicsTimeStamp.
Definition: epicsTime.cpp:944
epicsUInt32 secPastEpoch
seconds since 0000 Jan 1, 1990
Definition: epicsTime.h:34
EPICS time stamp, for use from C code.
Definition: epicsTime.h:33
epicsShareExtern const int64 posixEpochAtEpicsEpoch
Definition: timeStamp.h:25
epicsUInt32 nsec
nanoseconds within second
Definition: epicsTime.h:35
void epics::pvData::TimeStamp::getCurrent ( )

Set the timeStamp to the current time.

Definition at line 70 of file timeStamp.cpp.

71 {
72  epicsTimeStamp epicsTime;
73  epicsTimeGetCurrent(&epicsTime);
74  secondsPastEpoch = epicsTime.secPastEpoch;
75  secondsPastEpoch += posixEpochAtEpicsEpoch;
76  nanoseconds = epicsTime.nsec;
77 }
epicsUInt32 secPastEpoch
seconds since 0000 Jan 1, 1990
Definition: epicsTime.h:34
int epicsStdCall epicsTimeGetCurrent(epicsTimeStamp *pDest)
Get current time into *pDest.
EPICS time stamp, for use from C code.
Definition: epicsTime.h:33
epicsShareExtern const int64 posixEpochAtEpicsEpoch
Definition: timeStamp.h:25
epicsUInt32 nsec
nanoseconds within second
Definition: epicsTime.h:35
int64 epics::pvData::TimeStamp::getEpicsSecondsPastEpoch ( ) const
inline

Get secondsPastEpoch for EPICS V3. This is seconds since 1990 UTC.

Returns
The epics V3 secondsPastEpoch.

Definition at line 84 of file timeStamp.h.

84  {
85  return secondsPastEpoch - posixEpochAtEpicsEpoch;
86  }
epicsShareExtern const int64 posixEpochAtEpicsEpoch
Definition: timeStamp.h:25
int64 epics::pvData::TimeStamp::getMilliseconds ( )

Get number of milliseconds past epoch.

Returns
milliseconds past epoch.

Definition at line 182 of file timeStamp.cpp.

183 {
184  return secondsPastEpoch*1000 + nanoseconds/1000000;
185 }
int32 epics::pvData::TimeStamp::getNanoseconds ( ) const
inline

Get nanoseconds.

Returns
nanoseconds within timeStamp.

Definition at line 91 of file timeStamp.h.

91 {return nanoseconds;}
int64 epics::pvData::TimeStamp::getSecondsPastEpoch ( ) const
inline

Get secondsPastEpoch.

Returns
The secondsPastEpoch.

Definition at line 78 of file timeStamp.h.

78 {return secondsPastEpoch;}
int32 epics::pvData::TimeStamp::getUserTag ( ) const
inline

Get userTag.

Returns
userTag.

Definition at line 96 of file timeStamp.h.

96 {return userTag;}
void epics::pvData::TimeStamp::normalize ( )

adjust secondsPastEpoch and nanoseconds so that 0 <= nanoseconds < nanoSecPerSec

Definition at line 35 of file timeStamp.cpp.

36 {
37  if(nanoseconds>=0 && nanoseconds<nanoSecPerSec) return;
38  while(nanoseconds>=nanoSecPerSec) {
39  nanoseconds -= nanoSecPerSec;
40  secondsPastEpoch++;
41  }
42  while(nanoseconds<0) {
43  nanoseconds += nanoSecPerSec;
44  secondsPastEpoch--;
45  }
46 }
epicsShareExtern const int32 nanoSecPerSec
Definition: timeStamp.h:24
bool epics::pvData::TimeStamp::operator!= ( TimeStamp const &  right) const

Standard C++ operator.

Definition at line 106 of file timeStamp.cpp.

107 {
108  int64 sdiff = diffInt(*this,right);
109  if(sdiff!=0) return true;
110  return false;
111 }
int64_t int64
Definition: pvType.h:87
TimeStamp & epics::pvData::TimeStamp::operator+= ( int64  seconds)

Standard C++ operator.

Definition at line 149 of file timeStamp.cpp.

150 {
151  secondsPastEpoch += seconds;
152  return *this;
153 }
TimeStamp & epics::pvData::TimeStamp::operator+= ( double  seconds)

Standard C++ operator.

Definition at line 161 of file timeStamp.cpp.

162 {
163  int64 secs = static_cast<int64>(seconds);
164  int64 nano = static_cast<int64>((seconds - secs)*1e9);
165  nanoseconds += static_cast<int32>(nano);
166  if(nanoseconds>nanoSecPerSec) {
167  nanoseconds -= nanoSecPerSec;
168  secondsPastEpoch += 1;
169  } else if(nanoseconds<-nanoSecPerSec) {
170  nanoseconds += -nanoSecPerSec;
171  secondsPastEpoch -= 1;
172  }
173  secondsPastEpoch += secs;
174  return *this;
175 }
epicsShareExtern const int32 nanoSecPerSec
Definition: timeStamp.h:24
int64_t int64
Definition: pvType.h:87
int32_t int32
Definition: pvType.h:83
TimeStamp & epics::pvData::TimeStamp::operator-= ( int64  seconds)

Standard C++ operator.

Definition at line 155 of file timeStamp.cpp.

156 {
157  secondsPastEpoch -= seconds;
158  return *this;
159 }
TimeStamp & epics::pvData::TimeStamp::operator-= ( double  seconds)

Standard C++ operator.

Definition at line 177 of file timeStamp.cpp.

178 {
179  return operator+=(-seconds);
180 }
TimeStamp & operator+=(int64 seconds)
Definition: timeStamp.cpp:149
bool epics::pvData::TimeStamp::operator< ( TimeStamp const &  right) const

Standard C++ operator.

Definition at line 120 of file timeStamp.cpp.

121 {
122  int64 sdiff = diffInt(*this,right);
123  if(sdiff<0) return true;
124  return false;
125 }
int64_t int64
Definition: pvType.h:87
bool epics::pvData::TimeStamp::operator<= ( TimeStamp const &  right) const

Standard C++ operator.

Definition at line 113 of file timeStamp.cpp.

114 {
115  int64 sdiff = diffInt(*this,right);
116  if(sdiff<=0) return true;
117  return false;
118 }
int64_t int64
Definition: pvType.h:87
bool epics::pvData::TimeStamp::operator== ( TimeStamp const &  right) const

Standard C++ operator.

Definition at line 99 of file timeStamp.cpp.

100 {
101  int64 sdiff = diffInt(*this,right);
102  if(sdiff==0) return true;
103  return false;
104 }
int64_t int64
Definition: pvType.h:87
bool epics::pvData::TimeStamp::operator> ( TimeStamp const &  right) const

Standard C++ operator.

Definition at line 134 of file timeStamp.cpp.

135 {
136  int64 sdiff = diffInt(*this,right);
137  if(sdiff>0) return true;
138  return false;
139 }
int64_t int64
Definition: pvType.h:87
bool epics::pvData::TimeStamp::operator>= ( TimeStamp const &  right) const

Standard C++ operator.

Definition at line 127 of file timeStamp.cpp.

128 {
129  int64 sdiff = diffInt(*this,right);
130  if(sdiff>=0) return true;
131  return false;
132 }
int64_t int64
Definition: pvType.h:87
void epics::pvData::TimeStamp::put ( int64  secondsPastEpoch,
int32  nanoseconds = 0 
)
inline

Set time fields in timeStamp. Result will be normalized.

Parameters
secondsPastEpochseconds part of timeStamp.
nanosecondsnanoseconds part of timeStamp.

Definition at line 108 of file timeStamp.h.

108  {
109  this->secondsPastEpoch = secondsPastEpoch;
110  this->nanoseconds = nanoseconds;
111  normalize();
112  }
void epics::pvData::TimeStamp::put ( int64  milliseconds)

Set time fields in timeStamp.

Parameters
millisecondsThe number of milliseconds since the epoch.

Definition at line 64 of file timeStamp.cpp.

65 {
66  secondsPastEpoch = milliseconds/1000;
67  nanoseconds = (milliseconds%1000)*1000000;
68 }
void epics::pvData::TimeStamp::setUserTag ( int32  userTag)
inline

Set userTag.

Parameters
userTagapplication specific.

Definition at line 101 of file timeStamp.h.

101 {this->userTag = userTag;}
double epics::pvData::TimeStamp::toSeconds ( ) const

Convert the timeStamp to a double value that is seconds past epoch.

Returns
seconds past 1970 UTC

Definition at line 79 of file timeStamp.cpp.

80 {
81  double value = static_cast<double>(secondsPastEpoch);
82  double nano = nanoseconds;
83  value += nano/1e9;
84  return value;
85 }
Definition: link.h:174
void epics::pvData::TimeStamp::toTime_t ( time_t &  time) const

Set time from timeStamp

Parameters
timetime as defined by std::time

Definition at line 56 of file timeStamp.cpp.

57 {
58  epicsTimeStamp epicsTime;
59  epicsTime.secPastEpoch = static_cast<epicsUInt32>(secondsPastEpoch-posixEpochAtEpicsEpoch);
60  epicsTime.nsec = nanoseconds;
61  epicsTimeToTime_t(&tt,&epicsTime);
62 }
unsigned int epicsUInt32
Definition: epicsTypes.h:43
epicsUInt32 secPastEpoch
seconds since 0000 Jan 1, 1990
Definition: epicsTime.h:34
LIBCOM_API int epicsStdCall epicsTimeToTime_t(time_t *pDest, const epicsTimeStamp *pSrc)
Convert epicsTimeStamp to ANSI C time_t.
Definition: epicsTime.cpp:933
EPICS time stamp, for use from C code.
Definition: epicsTime.h:33
epicsShareExtern const int64 posixEpochAtEpicsEpoch
Definition: timeStamp.h:25
epicsUInt32 nsec
nanoseconds within second
Definition: epicsTime.h:35

The documentation for this class was generated from the following files: