Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
p6time.h
Go to the documentation of this file.
1 
9 #ifndef P6TIME_H__
10 #define P6TIME_H__ 1
11 
12 #include "p6err.h" // Error and type definitions
13 #include "p6comdef.h" // [p6]COM definitions
14 #include "p6errorinfo.h" // Definition only, not supported by p6Loader
15 #include "p6runtimeapi.h" // Platform runtime API definitions
16 #include "p6comhlpr.h" // [p6]COM helper macros
17 
18 namespace P6R {
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
28 #define P6RFC822DATESZ 35
29 #define P6ISO8601DATESZ 26
30 
31 #define P6INRVLINFINITE ((P6R::P6INTERVAL)-1)
32 #define P6INRVLNOTIMEOUT ((P6R::P6INTERVAL)0)
33 
40 interface p6ITime : p6ICom
41 {
52  P6COMMETHOD initialize() = 0;
53 
67  P6COMMETHOD now(P6R::P6TIME *pTime) = 0;
68 
83 
103  P6COMMETHOD expand(const P6R::P6TIME *pTime,P6R::P6TIMEINFO *pExpandedTime,P6R::P6BOOL bLocalTime) = 0;
104 
120  P6COMMETHOD collapse(P6R::P6TIMEINFO *pExpandedTime,P6R::P6TIME *pTime) = 0;
121 
141  P6COMMETHOD adjust(P6R::P6TIMEINFO *pExpandedTime,P6R::P6INT32 tzOffset) = 0;
142 
143 
157  P6COMMETHOD addMillseconds(P6R::P6TIME *pTime,P6R::P6INT32 nMilliseconds) = 0;
158 
172  P6COMMETHOD addSeconds(P6R::P6TIME *pTime,P6R::P6INT32 nSeconds) = 0;
173 
187  P6COMMETHOD addMinutes(P6R::P6TIME *pTime,P6R::P6INT32 nMinutes) = 0;
188 
202  P6COMMETHOD addHours(P6R::P6TIME *pTime,P6R::P6INT32 nHours) = 0;
203 
204 
214  P6COMMETHOD addP6Interval(P6R::P6TIME *pTime,const P6R::P6INTERVAL *pInterval) = 0;
215 
216 
228  P6COMMETHOD diffP6Time(const P6R::P6TIME *pTime1,const P6R::P6TIME *pTime2,P6R::P6INTERVAL *pIntervalDifference) = 0;
229 
243  P6COMMETHOD unixTimeToP6Time(P6R::P6INT32 unixTime,P6R::P6TIME *pTimeOut) = 0;
244 
258  P6COMMETHOD p6TimeToUnixTime(const P6R::P6TIME *pTime,P6R::P6INT32 *pUnixTime) = 0;
259 
283  P6COMMETHOD createRfc822DateW(const P6R::P6TIME *pTime,P6R::P6WCHAR *pBuffer,P6R::P6SIZE cBuffer,P6R::P6SIZE *pcWritten) = 0;
284 
309  P6COMMETHOD createRfc822DateA(const P6R::P6TIME *pTime,P6R::P6CHAR *pBuffer,P6R::P6SIZE cBuffer,P6R::P6SIZE *pcWritten) = 0;
310 
337  P6COMMETHOD parseRfc822DateW(const P6R::P6WCHAR *pwszDate,P6R::P6TIME *pOutTime,P6R::P6INT32* pDeltaFromGMT) = 0;
338 
367  P6COMMETHOD parseRfc822DateA(const P6R::P6CHAR *pszDate,P6R::P6TIME *pOutTime,P6R::P6INT32* pDeltaFromGMT) = 0;
368 
395  P6COMMETHOD createISO8601DateW(const P6R::P6TIME *pTime,P6R::P6INT32 deltaFromGMT,P6R::P6UINT8 degree,P6R::P6WCHAR *pBuffer,P6R::P6SIZE cBuffer,P6R::P6SIZE *pcWritten) = 0;
396 
423  P6COMMETHOD createISO8601DateA(const P6R::P6TIME *pTime,P6R::P6INT32 deltaFromGMT,P6R::P6UINT8 degree,P6R::P6CHAR *pBuffer,P6R::P6SIZE cBuffer,P6R::P6SIZE *pcWritten) = 0;
424 
449  P6COMMETHOD parseISO8601DateW(const P6R::P6WCHAR *pwszDate,P6R::P6TIME *pOutTime,P6R::P6INT32* pDeltaFromGMT) = 0;
450 
476  P6COMMETHOD parseISO8601DateA(const P6R::P6CHAR *pszDate,P6R::P6TIME *pOutTime,P6R::P6INT32* pDeltaFromGMT) = 0;
477 
478 
492 };
493 
494 // {C44DC7E7-23BD-45dc-881C-5ACB28897E87}
495 #define IF_p6ITime {0xC44DC7E7,0x23BD,0x45dc,{0x88,0x1C,0x5A,0xCB,0x28,0x89,0x7E,0x87}}
496 
497 // {9A30C203-A82C-46b3-9307-8CB1F59AC0BB}
498 #define COMP_p6Time {0x9A30C203,0xA82C,0x46b3,{0x93,0x07,0x8C,0xB1,0xF5,0x9A,0xC0,0xBB}}
499 
514 {
525  P6COMMETHOD initialize() = 0;
526 
537  P6COMMETHOD get(P6R::P6INTERVAL *pInterval) = 0;
538 
539  P6COMMETHOD addMicroSeconds(P6R::P6INTERVAL *pInterval,P6R::P6INT64 uSeconds) = 0;
540  P6COMMETHOD addMilliSeconds(P6R::P6INTERVAL *pInterval,P6R::P6INT32 mSeconds) = 0;
541  P6COMMETHOD addSeconds(P6R::P6INTERVAL *pInterval,P6R::P6INT32 seconds) = 0;
542  P6COMMETHOD addMinutes(P6R::P6INTERVAL *pInterval,P6R::P6INT32 minutes) = 0;
543  P6COMMETHOD addHours(P6R::P6INTERVAL *pInterval,P6R::P6INT32 hours) = 0;
544 
557  P6COMMETHOD secondsToInterval(P6R::P6UINT32 nSeconds,P6R::P6INTERVAL *pInterval) = 0;
558 
572  P6COMMETHOD milliSecondsToInterval(P6R::P6UINT32 nMilliSeconds,P6R::P6INTERVAL *pInterval) = 0;
573 
587  P6COMMETHOD microSecondsToInterval(P6R::P6UINT64 nMicroSeconds,P6R::P6INTERVAL *pInterval) = 0;
588 
601  P6COMMETHOD intervalToSeconds(P6R::P6INTERVAL *pInterval,P6R::P6UINT32 *pnSeconds) = 0;
602 
615  P6COMMETHOD intervalToMilliSeconds(P6R::P6INTERVAL *pInterval,P6R::P6UINT32 *pnMilliSeconds) = 0;
616 
629  P6COMMETHOD intervalToMicroSeconds(P6R::P6INTERVAL *pInterval,P6R::P6UINT64 *pnMicroSeconds) = 0;
630 
631  P6COMMETHOD getFractionalSeconds(const P6R::P6INTERVAL *pInterval,P6R::P6UINT64 *pnFractionalSeconds) = 0;
632 
647  P6COMMETHOD expandInterval(const P6R::P6INTERVAL *pInterval,P6R::P6EXPANDEDINTERVAL *pExpanded) = 0;
648 
662  P6COMMETHOD getFrequency(P6R::P6UINT64 *pFrequency) = 0;
663 };
664 
665 // {4AB989F9-4310-4DDB-B614-EB7F8CF5958C}
666 #define IF_p6IIntervalTime {0x4AB989F9,0x4310,0x4DDB,{0xB6,0x14,0xEB,0x7F,0x8C,0xF5,0x95,0x8C}}
667 
668 // {FAB4E452-CBD8-488E-B796-CA78AE9270E6}
669 #define COMP_p6IntervalTime {0xFAB4E452,0xCBD8,0x488E,{0xB7,0x96,0xCA,0x78,0xAE,0x92,0x70,0xE6}}
670 
671 #define GLOBAL_TIMEZONES_INTERFACE "P6R::p6Time::GlobalTimezonesConfig"
672 
673 #define P6MSECPERSEC 1000
674 #define P6USECPERSEC 1000000
675 #define P6NANOSECPERSEC 1000000000
676 
677 #ifdef __cplusplus
678 }
679 #endif
680 
681 } // namespace
682 
683 #endif
684 
virtual P6R::P6ERR collapse(P6R::P6TIMEINFO *pExpandedTime, P6R::P6TIME *pTime)=0
Colapses the specified P6TIMEINFO structure into a P6TIME value, automatically adjusting for any chan...
size_t P6SIZE
Definition: p6types.h:62
virtual P6R::P6ERR getLocalTimezoneOffset(P6R::P6INT32 *pOffset)=0
Retrieves the local timezone offset from GMT.
P6LONGLONG P6INT64
Definition: p6types.h:50
virtual P6R::P6ERR unixTimeToP6Time(P6R::P6INT32 unixTime, P6R::P6TIME *pTimeOut)=0
This method converts a unix style time (seconds since Jan 1, 1970) into a P6TIME. ...
virtual P6R::P6ERR getFrequency(P6R::P6UINT64 *pFrequency)=0
Returns the platform dependent counter frequency (ticks/second).
virtual P6R::P6ERR milliSecondsToInterval(P6R::P6UINT32 nMilliSeconds, P6R::P6INTERVAL *pInterval)=0
Convert the specified number of milliseconds (1/1000 second) into an interval time value...
unsigned int P6UINT32
Definition: p6types.h:40
Standard error codes.
virtual P6R::P6ERR addHours(P6R::P6TIME *pTime, P6R::P6INT32 nHours)=0
Adds the specified number of hours to the provided P6TIME value.
bool P6BOOL
Boolean type.
Definition: p6types.h:101
Provides an interface to the system wallclock time.
Definition: p6time.h:40
virtual P6R::P6ERR addMicroSeconds(P6R::P6INTERVAL *pInterval, P6R::P6INT64 uSeconds)=0
virtual P6R::P6ERR microSecondsToInterval(P6R::P6UINT64 nMicroSeconds, P6R::P6INTERVAL *pInterval)=0
Convert the specified number of microseconds (1/1000000 second) into an interval time value...
unsigned char P6UINT8
Definition: p6types.h:30
virtual P6R::P6ERR expand(const P6R::P6TIME *pTime, P6R::P6TIMEINFO *pExpandedTime, P6R::P6BOOL bLocalTime)=0
Expands the provided P6TIME value into an P6TIMEINFO structure.
virtual P6R::P6ERR createRfc822DateA(const P6R::P6TIME *pTime, P6R::P6CHAR *pBuffer, P6R::P6SIZE cBuffer, P6R::P6SIZE *pcWritten)=0
Given a P6R::P6TIME, creates an RFC 822 compliant date string.
P6COM runtime interfaces definitions.
wchar_t P6WCHAR
Wide character type see p6i18n.h.
Definition: p6types.h:76
A structure that is used to describe a specified time.
Definition: p6types.h:233
int P6INT32
Definition: p6types.h:41
virtual P6R::P6ERR addSeconds(P6R::P6INTERVAL *pInterval, P6R::P6INT32 seconds)=0
The base interface all [p6]COM components must derive from and implement.
Definition: p6comdef.h:96
P6COM base interface definitions.
virtual P6R::P6ERR diffP6Time(const P6R::P6TIME *pTime1, const P6R::P6TIME *pTime2, P6R::P6INTERVAL *pIntervalDifference)=0
Find the difference between two P6TIME's and return the result as a P6INTERVAL.
p6IErrorInfo interface definition
virtual P6R::P6ERR parseISO8601DateA(const P6R::P6CHAR *pszDate, P6R::P6TIME *pOutTime, P6R::P6INT32 *pDeltaFromGMT)=0
Given an ISO 8601 compliant narrow character date string, this method converts it into a P6R::P6TIME...
virtual P6R::P6ERR secondsToInterval(P6R::P6UINT32 nSeconds, P6R::P6INTERVAL *pInterval)=0
Convert the specified number of seconds into an interval time value.
virtual P6R::P6ERR expandInterval(const P6R::P6INTERVAL *pInterval, P6R::P6EXPANDEDINTERVAL *pExpanded)=0
Expands the specified interval time value into hour.
virtual P6R::P6ERR p6TimeToUnixTime(const P6R::P6TIME *pTime, P6R::P6INT32 *pUnixTime)=0
This method converts a P6TIME into a unix style time (seconds since Jan 1, 1970). ...
virtual P6R::P6ERR addMilliSeconds(P6R::P6INTERVAL *pInterval, P6R::P6INT32 mSeconds)=0
virtual P6R::P6ERR parseRfc822DateW(const P6R::P6WCHAR *pwszDate, P6R::P6TIME *pOutTime, P6R::P6INT32 *pDeltaFromGMT)=0
Given an RFC 822 compliant wide character date string, this method converts it into a P6R::P6TIME...
virtual P6R::P6ERR parseRfc822DateA(const P6R::P6CHAR *pszDate, P6R::P6TIME *pOutTime, P6R::P6INT32 *pDeltaFromGMT)=0
Given an RFC 822 compliant narrow character date string, this method converts it into a P6R::P6TIME...
P6ULONGLONG P6UINT64
Definition: p6types.h:49
virtual P6R::P6ERR getFractionalSeconds(const P6R::P6INTERVAL *pInterval, P6R::P6UINT64 *pnFractionalSeconds)=0
virtual P6R::P6ERR addHours(P6R::P6INTERVAL *pInterval, P6R::P6INT32 hours)=0
virtual P6R::P6ERR createISO8601DateA(const P6R::P6TIME *pTime, P6R::P6INT32 deltaFromGMT, P6R::P6UINT8 degree, P6R::P6CHAR *pBuffer, P6R::P6SIZE cBuffer, P6R::P6SIZE *pcWritten)=0
Given a P6R::P6TIME, creates an ISO 8601 compliant date string.
virtual P6R::P6ERR addSeconds(P6R::P6TIME *pTime, P6R::P6INT32 nSeconds)=0
Adds the specified number of seconds to the provided P6TIME value.
Get and translate interval times.
Definition: p6time.h:513
virtual P6R::P6ERR parseISO8601DateW(const P6R::P6WCHAR *pwszDate, P6R::P6TIME *pOutTime, P6R::P6INT32 *pDeltaFromGMT)=0
Given an ISO 8601 compliant wide character date string, this method converts it into a P6R::P6TIME...
virtual P6R::P6ERR initialize()=0
Inialize the component interface for use.
virtual P6R::P6ERR intervalToMilliSeconds(P6R::P6INTERVAL *pInterval, P6R::P6UINT32 *pnMilliSeconds)=0
Converts the specified interval time into milliseconds (1/1000 second).
#define P6COMMETHOD
Definition: p6types.h:872
virtual P6R::P6ERR createRfc822DateW(const P6R::P6TIME *pTime, P6R::P6WCHAR *pBuffer, P6R::P6SIZE cBuffer, P6R::P6SIZE *pcWritten)=0
Given a P6R::P6TIME, creates an RFC 822 compliant date string.
virtual P6R::P6ERR adjust(P6R::P6TIMEINFO *pExpandedTime, P6R::P6INT32 tzOffset)=0
This method provides the ability to easily modify times and adjust for diferent timezone offsets etc...
virtual P6R::P6ERR createISO8601DateW(const P6R::P6TIME *pTime, P6R::P6INT32 deltaFromGMT, P6R::P6UINT8 degree, P6R::P6WCHAR *pBuffer, P6R::P6SIZE cBuffer, P6R::P6SIZE *pcWritten)=0
Given a P6R::P6TIME, creates an ISO 8601 compliant date string.
P6INT64 P6TIME
The wallclock time represented as the number of microseconds since midnight January 1 1970 UTC...
Definition: p6types.h:228
virtual P6R::P6ERR initialize()=0
This method is used to initialize this instance of the the component for use.
virtual P6R::P6ERR addMillseconds(P6R::P6TIME *pTime, P6R::P6INT32 nMilliseconds)=0
Adds the specified number of milliseconds to the provided P6TIME value.
virtual P6R::P6ERR now(P6R::P6TIME *pTime)=0
Returns microseconds since UTC epoch (Midinight, January 1, 1970) as a 64bit value representing the c...
virtual P6R::P6ERR getTimezoneOffset(P6R::P6INT32 *pTzOffset)=0
Retrieves the current localtime's offset from GMT in seconds.
virtual P6R::P6ERR addMinutes(P6R::P6INTERVAL *pInterval, P6R::P6INT32 minutes)=0
virtual P6R::P6ERR intervalToSeconds(P6R::P6INTERVAL *pInterval, P6R::P6UINT32 *pnSeconds)=0
Converts the specified interval time into seconds.
virtual P6R::P6ERR intervalToMicroSeconds(P6R::P6INTERVAL *pInterval, P6R::P6UINT64 *pnMicroSeconds)=0
Converts the specified interval time into microseconds (1/1000000 second).
P6R Component runtime helper macros, templated, etc.
virtual P6R::P6ERR addP6Interval(P6R::P6TIME *pTime, const P6R::P6INTERVAL *pInterval)=0
Add the amount of time specified in pInterval to pTime.
char P6CHAR
Narrow character type.
Definition: p6types.h:71
virtual P6R::P6ERR addMinutes(P6R::P6TIME *pTime, P6R::P6INT32 nMinutes)=0
Adds the specified number of minutes to the provided P6TIME value.