16 #ifndef epicsTimehInclude
17 #define epicsTimehInclude
21 #include "libComAPI.h"
27 #define POSIX_TIME_AT_EPICS_EPOCH 631152000u
55 #define TS_STAMP epicsTimeStamp
83 #define S_time_noProvider (M_time| 1)
85 #define S_time_badEvent (M_time| 2)
87 #define S_time_badArgs (M_time| 3)
89 #define S_time_noMemory (M_time| 4)
91 #define S_time_unsynchronized (M_time| 5)
93 #define S_time_timezone (M_time| 6)
95 #define S_time_conversion (M_time| 7)
102 #define epicsTimeEventCurrentTime 0
103 #define epicsTimeEventBestTime -1
104 #define epicsTimeEventDeviceTime -2
150 struct tm * pDest,
unsigned long * pNSecDest,
const epicsTimeStamp * pSrc );
153 struct tm * pDest,
unsigned long * pNSecDest,
const epicsTimeStamp * pSrc );
156 epicsTimeStamp * pDest,
const struct tm * pSrc,
unsigned long nSecSrc );
159 epicsTimeStamp * pDest,
const struct tm * pSrc,
unsigned long nSecSrc );
228 char * pBuff,
size_t bufLength,
const char * pFormat,
const epicsTimeStamp * pTS );
239 LIBCOM_API
int epicsStdCall
epicsTime_localtime (
const time_t * clock,
struct tm * result );
241 LIBCOM_API
int epicsStdCall
epicsTime_gmtime (
const time_t * clock,
struct tm * result );
256 #ifdef EPICS_EXPOSE_LIBCOM_MONOTONIC_PRIVATE
257 LIBCOM_API
void osdMonotonicInit(
void);
304 operator int ()
const {
return eventNumber; }
323 static void throwError(
int code);
331 #if __cplusplus>=201103L
335 ts.secPastEpoch = ts.nsec = 0u;
469 operator struct timeval () const ;
482 operator struct _FILETIME () const;
486 epicsTime & operator = (
const struct _FILETIME & );
494 double operator- (
const epicsTime & other)
const {
506 return (*
this)+(-delta);
515 return (*
this) += (-delta);
522 bool operator == (
const epicsTime & other)
const {
568 size_t strftime (
char * pBuff,
size_t bufLength,
const char * pFormat )
const {
573 void show (
unsigned interestLevel )
const {
582 std::ostream& operator<<(std::ostream& strm,
const epicsTime& ts);
LIBCOM_API double epicsStdCall epicsTimeDiffInSeconds(const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
Time difference between left and right in seconds.
LIBCOM_API int epicsStdCall epicsTimeToGMTM(struct tm *pDest, unsigned long *pNSecDest, const epicsTimeStamp *pSrc)
Convert epicsTimeStamp to struct tm in UTC/GMT.
C++ only ANSI C struct tm with nanoseconds, local timezone.
LIBCOM_API int epicsStdCall epicsTimeLessThanEqual(const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
right was no later than left
LIBCOM_API int epicsStdCall epicsTimeGreaterThan(const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
left was after right
LIBCOM_API epicsUInt64 epicsMonotonicResolution(void)
Monotonic time resolution, may not be accurate. Returns the minimum non-zero time difference between ...
LIBCOM_API int epicsStdCall epicsTimeFromTime_t(epicsTimeStamp *pDest, time_t src)
Convert ANSI C time_t to epicsTimeStamp.
epicsTime(const local_tm_nano_sec &replace)
Construct from struct tm in local time zone.
epicsUInt64 epicsUTag
Type of UTAG field (dbCommon::utag)
LIBCOM_API int epicsStdCall epicsTimeGetEvent(epicsTimeStamp *pDest, int eventNumber)
Get time of event eventNumber into *pDest.
unsigned long nSec
nanoseconds extension
epicsUInt32 nsec
nanoseconds within second
LIBCOM_API int epicsStdCall epicsTimeEqual(const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
left equals right
The core data types used by epics.
LIBCOM_API epicsInt64 epicsStdCall epicsTimeDiffInNS(const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
Time difference between left and right, as a signed integer number of nanoseconds.
LIBCOM_API int epicsTimeGetCurrentInt(epicsTimeStamp *pDest)
Get current time into *pDest (ISR-safe)
LIBCOM_API int epicsStdCall epicsTimeToTimeval(struct timeval *pDest, const epicsTimeStamp *pSrc)
Convert epicsTimeStamp to struct timeval
LIBCOM_API int epicsStdCall epicsTimeToTimespec(struct timespec *pDest, const epicsTimeStamp *pSrc)
Convert epicsTimeStamp to struct timespec
struct tm ansi_tm
ANSI C time details.
LIBCOM_API int epicsStdCall epicsTimeFromTimespec(epicsTimeStamp *pDest, const struct timespec *pSrc)
Set epicsTimeStamp from struct timespec
std::runtime_error unableToFetchCurrentTime
Exception: Time provider problem.
LIBCOM_API int epicsStdCall epicsTimeFromTimeval(epicsTimeStamp *pDest, const struct timeval *pSrc)
Set epicsTimeStamp from struct timeval
unsigned long nSec
nanoseconds extension
epicsUInt32 secPastEpoch
seconds since 0000 Jan 1, 1990
LIBCOM_API int epicsStdCall epicsTime_localtime(const time_t *clock, struct tm *result)
Break down a time_t into a struct tm in the local timezone.
EPICS time stamp, for use from C code.
epicsTime()
The default constructor sets the time to the EPICS epoch.
LIBCOM_API int epicsStdCall epicsTimeToTM(struct tm *pDest, unsigned long *pNSecDest, const epicsTimeStamp *pSrc)
Convert epicsTimeStamp to struct tm in local time zone.
C++ only ANSI C sruct tm with nanoseconds, UTC.
LIBCOM_API int epicsStdCall epicsTimeGetCurrent(epicsTimeStamp *pDest)
Get current time into *pDest.
BSD and SRV5 Unix timestamp.
LIBCOM_API int epicsStdCall epicsTime_gmtime(const time_t *clock, struct tm *result)
Break down a time_t into a struct tm in the UTC timezone.
C++ Event number wrapper class.
LIBCOM_API epicsUInt64 epicsMonotonicGet(void)
Fetch monotonic counter, returns the number of nanoseconds since some unspecified time...
size_t strftime(char *pBuff, size_t bufLength, const char *pFormat) const
Convert to string in user-specified format.
epicsTime(const struct timespec &replace)
Construct from struct timespec
std::logic_error formatProblemWithStructTM
Exception: Bad field(s) in struct tm
struct tm ansi_tm
ANSI C time details.
LIBCOM_API void epicsStdCall epicsTimeShow(const epicsTimeStamp *, unsigned interestLevel)
Dump current state to stdout.
LIBCOM_API int epicsStdCall epicsTimeLessThan(const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
left was before right
Defined by POSIX Real Time.
epicsTime(const gm_tm_nano_sec &replace)
Construct from struct tm in UTC/GMT.
LIBCOM_API int epicsStdCall epicsTimeFromTM(epicsTimeStamp *pDest, const struct tm *pSrc, unsigned long nSecSrc)
Set epicsTimeStamp from struct tm in local time zone.
LIBCOM_API int epicsStdCall epicsTimeGreaterThanEqual(const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
right was not before left
static epicsTime getMonotonic()
Get current monotonic time.
LIBCOM_API int epicsStdCall epicsTimeFromGMTM(epicsTimeStamp *pDest, const struct tm *pSrc, unsigned long nSecSrc)
Set epicsTimeStamp from struct tm in UTC/GMT.
void show(unsigned interestLevel) const
Dump current state to standard out.
LIBCOM_API int epicsTimeGetMonotonic(epicsTimeStamp *pDest)
Get monotonic time into *pDest.
LIBCOM_API int epicsStdCall epicsTimeNotEqual(const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
left not equal to right
LIBCOM_API int epicsTimeGetEventInt(epicsTimeStamp *pDest, int eventNumber)
Get time of event eventNumber into *pDest (ISR-safe)
LIBCOM_API size_t epicsStdCall epicsTimeToStrftime(char *pBuff, size_t bufLength, const char *pFormat, const epicsTimeStamp *pTS)
Convert epicsTimeStamp to string. See epicsTime::strftime()
LIBCOM_API void epicsStdCall epicsTimeAddSeconds(epicsTimeStamp *pDest, double secondsToAdd)
Add some number of seconds to dest.
LIBCOM_API int epicsStdCall epicsTimeToTime_t(time_t *pDest, const epicsTimeStamp *pSrc)
Convert epicsTimeStamp to ANSI C time_t.
epicsTime(const time_t_wrapper &replace)
Construct from ANSI C time_t.