38#ifndef INCLUDED_BLPAPI_DATETIME
39#define INCLUDED_BLPAPI_DATETIME
105struct blpapi_Datetime_tag {
106 blpapi_UChar_t parts;
107 blpapi_UChar_t hours;
108 blpapi_UChar_t minutes;
109 blpapi_UChar_t seconds;
110 blpapi_UInt16_t milliSeconds;
111 blpapi_UChar_t month;
113 blpapi_UInt16_t year;
114 blpapi_Int16_t offset;
123struct blpapi_HighPrecisionDatetime_tag {
124 blpapi_Datetime_t datetime;
125 blpapi_UInt32_t picoseconds;
129typedef struct blpapi_HighPrecisionDatetime_tag blpapi_HighPrecisionDatetime_t;
144int blpapi_Datetime_compare(blpapi_Datetime_t lhs, blpapi_Datetime_t rhs);
162int blpapi_Datetime_print(
const blpapi_Datetime_t *datetime,
163 blpapi_StreamWriter_t streamWriter,
182int blpapi_HighPrecisionDatetime_compare(
183 const blpapi_HighPrecisionDatetime_t *lhs,
184 const blpapi_HighPrecisionDatetime_t *rhs);
204int blpapi_HighPrecisionDatetime_print(
205 const blpapi_HighPrecisionDatetime_t *datetime,
206 blpapi_StreamWriter_t streamWriter,
225int blpapi_HighPrecisionDatetime_fromTimePoint(
226 blpapi_HighPrecisionDatetime_t *datetime,
227 const blpapi_TimePoint_t *timePoint,
265 YEAR = BLPAPI_DATETIME_YEAR_PART,
267 DAY = BLPAPI_DATETIME_DAY_PART,
278 DATE = BLPAPI_DATETIME_DATE_PART,
281 TIME = BLPAPI_DATETIME_TIME_PART,
314 blpapi_HighPrecisionDatetime_t d_value;
316 static bool isLeapYear(
int year);
372 explicit Offset(
short minutesAheadOfUTC);
838 Datetime&
operator=(
const Datetime& rhs);
926 void setDay(
unsigned value);
1031 unsigned parts()
const;
1038 unsigned year()
const;
1044 unsigned month()
const;
1050 unsigned day()
const;
1056 unsigned hours()
const;
1121 const blpapi_Datetime_t&
rawValue()
const;
1153 std::ostream&
print(
1154 std::ostream& stream,
int level = 0,
int spacesPerLevel = 4)
const;
1245inline bool Datetime::isLeapYear(
int y)
1247 return 0 == y % 4 && (y <= 1752 || 0 != y % 100 || 0 == y % 400);
1251 unsigned newHours,
unsigned newMinutes,
unsigned newSeconds, TimeTag)
1253 std::memset(&d_value, 0,
sizeof(d_value));
1254 setTime(newHours, newMinutes, newSeconds);
1285 || (
day <= 0) || (
day > 31)) {
1317 if (isLeapYear(
year)) {
1323 }
else if (
day > 28) {
1360 && (fractionOfSecond.
d_usec >= 0)
1361 && (fractionOfSecond.
d_usec < 1000 * 1000);
1369 && (fractionOfSecond.
d_nsec >= 0)
1370 && (fractionOfSecond.
d_nsec < 1000 * 1000 * 1000);
1378 && (fractionOfSecond.
d_psec >= 0)
1379 && (fractionOfSecond.
d_psec < 1000LL * 1000 * 1000 * 1000);
1629 std::memset(&d_value, 0,
sizeof(d_value));
1630 d_value.datetime.year = 1;
1631 d_value.datetime.month = 1;
1632 d_value.datetime.day = 1;
1636 : d_value(original.d_value)
1642 d_value.datetime = newRawValue;
1643 d_value.picoseconds = 0;
1647 : d_value(newRawValue)
1655 unsigned newMinutes,
1656 unsigned newSeconds)
1658 d_value.datetime.offset = 0;
1659 d_value.datetime.year =
static_cast<blpapi_UInt16_t
>(newYear);
1660 d_value.datetime.month =
static_cast<blpapi_UChar_t
>(newMonth);
1661 d_value.datetime.day =
static_cast<blpapi_UChar_t
>(newDay);
1662 d_value.datetime.hours =
static_cast<blpapi_UChar_t
>(newHours);
1663 d_value.datetime.minutes =
static_cast<blpapi_UChar_t
>(newMinutes);
1664 d_value.datetime.seconds =
static_cast<blpapi_UChar_t
>(newSeconds);
1665 d_value.datetime.milliSeconds = 0;
1666 d_value.picoseconds = 0;
1674 unsigned newMinutes,
1675 unsigned newSeconds,
1676 unsigned newMilliSeconds)
1678 d_value.datetime.offset = 0;
1679 d_value.datetime.year =
static_cast<blpapi_UInt16_t
>(newYear);
1680 d_value.datetime.month =
static_cast<blpapi_UChar_t
>(newMonth);
1681 d_value.datetime.day =
static_cast<blpapi_UChar_t
>(newDay);
1682 d_value.datetime.hours =
static_cast<blpapi_UChar_t
>(newHours);
1683 d_value.datetime.minutes =
static_cast<blpapi_UChar_t
>(newMinutes);
1684 d_value.datetime.seconds =
static_cast<blpapi_UChar_t
>(newSeconds);
1685 d_value.datetime.milliSeconds
1686 =
static_cast<blpapi_UInt16_t
>(newMilliSeconds);
1687 d_value.picoseconds = 0;
1688 d_value.datetime.parts
1696 unsigned newMinutes,
1697 unsigned newSeconds,
1700 d_value.datetime.offset = 0;
1701 d_value.datetime.year =
static_cast<blpapi_UInt16_t
>(newYear);
1702 d_value.datetime.month =
static_cast<blpapi_UChar_t
>(newMonth);
1703 d_value.datetime.day =
static_cast<blpapi_UChar_t
>(newDay);
1704 d_value.datetime.hours =
static_cast<blpapi_UChar_t
>(newHours);
1705 d_value.datetime.minutes =
static_cast<blpapi_UChar_t
>(newMinutes);
1706 d_value.datetime.seconds =
static_cast<blpapi_UChar_t
>(newSeconds);
1707 d_value.datetime.milliSeconds
1708 =
static_cast<blpapi_UInt16_t
>(fractionOfSecond.
d_msec);
1709 d_value.picoseconds = 0;
1710 d_value.datetime.parts
1718 unsigned newMinutes,
1719 unsigned newSeconds,
1722 d_value.datetime.offset = 0;
1723 d_value.datetime.year =
static_cast<blpapi_UInt16_t
>(newYear);
1724 d_value.datetime.month =
static_cast<blpapi_UChar_t
>(newMonth);
1725 d_value.datetime.day =
static_cast<blpapi_UChar_t
>(newDay);
1726 d_value.datetime.hours =
static_cast<blpapi_UChar_t
>(newHours);
1727 d_value.datetime.minutes =
static_cast<blpapi_UChar_t
>(newMinutes);
1728 d_value.datetime.seconds =
static_cast<blpapi_UChar_t
>(newSeconds);
1729 d_value.datetime.milliSeconds
1730 =
static_cast<blpapi_UInt16_t
>(fractionOfSecond.
d_usec / 1000);
1731 d_value.picoseconds =
static_cast<blpapi_UInt32_t
>(
1732 (fractionOfSecond.
d_usec % 1000) * 1000 * 1000);
1733 d_value.datetime.parts
1741 unsigned newMinutes,
1742 unsigned newSeconds,
1745 d_value.datetime.offset = 0;
1746 d_value.datetime.year =
static_cast<blpapi_UInt16_t
>(newYear);
1747 d_value.datetime.month =
static_cast<blpapi_UChar_t
>(newMonth);
1748 d_value.datetime.day =
static_cast<blpapi_UChar_t
>(newDay);
1749 d_value.datetime.hours =
static_cast<blpapi_UChar_t
>(newHours);
1750 d_value.datetime.minutes =
static_cast<blpapi_UChar_t
>(newMinutes);
1751 d_value.datetime.seconds =
static_cast<blpapi_UChar_t
>(newSeconds);
1752 d_value.datetime.milliSeconds =
static_cast<blpapi_UInt16_t
>(
1753 fractionOfSecond.
d_nsec / 1000 / 1000);
1754 d_value.picoseconds =
static_cast<blpapi_UInt32_t
>(
1755 (fractionOfSecond.
d_nsec % (1000 * 1000)) * 1000);
1756 d_value.datetime.parts
1764 unsigned newMinutes,
1765 unsigned newSeconds,
1768 d_value.datetime.offset = 0;
1769 d_value.datetime.year =
static_cast<blpapi_UInt16_t
>(newYear);
1770 d_value.datetime.month =
static_cast<blpapi_UChar_t
>(newMonth);
1771 d_value.datetime.day =
static_cast<blpapi_UChar_t
>(newDay);
1772 d_value.datetime.hours =
static_cast<blpapi_UChar_t
>(newHours);
1773 d_value.datetime.minutes =
static_cast<blpapi_UChar_t
>(newMinutes);
1774 d_value.datetime.seconds =
static_cast<blpapi_UChar_t
>(newSeconds);
1775 d_value.datetime.milliSeconds =
static_cast<blpapi_UInt16_t
>(
1776 fractionOfSecond.
d_psec / 1000 / 1000 / 1000);
1777 d_value.picoseconds =
static_cast<blpapi_UInt32_t
>(
1778 fractionOfSecond.
d_psec % (1000 * 1000 * 1000));
1779 d_value.datetime.parts
1785 std::memset(&d_value, 0,
sizeof(d_value));
1786 setDate(newYear, newMonth, newDay);
1790 unsigned newMinutes,
1791 unsigned newSeconds,
1792 unsigned newMilliSeconds)
1794 std::memset(&d_value, 0,
sizeof(d_value));
1795 setTime(newHours, newMinutes, newSeconds, newMilliSeconds);
1799 unsigned newMinutes,
1800 unsigned newSeconds,
1803 std::memset(&d_value, 0,
sizeof(d_value));
1804 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1808 unsigned newMinutes,
1809 unsigned newSeconds,
1812 std::memset(&d_value, 0,
sizeof(d_value));
1813 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1817 unsigned newMinutes,
1818 unsigned newSeconds,
1821 std::memset(&d_value, 0,
sizeof(d_value));
1822 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1826 unsigned newMinutes,
1827 unsigned newSeconds,
1830 std::memset(&d_value, 0,
sizeof(d_value));
1831 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1836 d_value = rhs.d_value;
1841 unsigned newYear,
unsigned newMonth,
unsigned newDay)
1843 d_value.datetime.day =
static_cast<blpapi_UChar_t
>(newDay);
1844 d_value.datetime.month =
static_cast<blpapi_UChar_t
>(newMonth);
1845 d_value.datetime.year =
static_cast<blpapi_UInt16_t
>(newYear);
1850 unsigned newHours,
unsigned newMinutes,
unsigned newSeconds)
1852 d_value.datetime.hours =
static_cast<blpapi_UChar_t
>(newHours);
1853 d_value.datetime.minutes =
static_cast<blpapi_UChar_t
>(newMinutes);
1854 d_value.datetime.seconds =
static_cast<blpapi_UChar_t
>(newSeconds);
1855 d_value.datetime.milliSeconds = 0;
1856 d_value.picoseconds = 0;
1857 d_value.datetime.parts =
static_cast<blpapi_UChar_t
>(
1863 unsigned newMinutes,
1864 unsigned newSeconds,
1865 unsigned newMilliSeconds)
1867 d_value.datetime.hours =
static_cast<blpapi_UChar_t
>(newHours);
1868 d_value.datetime.minutes =
static_cast<blpapi_UChar_t
>(newMinutes);
1869 d_value.datetime.seconds =
static_cast<blpapi_UChar_t
>(newSeconds);
1870 d_value.datetime.milliSeconds
1871 =
static_cast<blpapi_UInt16_t
>(newMilliSeconds);
1872 d_value.picoseconds = 0;
1877 unsigned newMinutes,
1878 unsigned newSeconds,
1881 d_value.datetime.hours =
static_cast<blpapi_UChar_t
>(newHours);
1882 d_value.datetime.minutes =
static_cast<blpapi_UChar_t
>(newMinutes);
1883 d_value.datetime.seconds =
static_cast<blpapi_UChar_t
>(newSeconds);
1884 d_value.datetime.milliSeconds
1885 =
static_cast<blpapi_UInt16_t
>(fractionOfSecond.
d_msec);
1886 d_value.picoseconds = 0;
1891 unsigned newMinutes,
1892 unsigned newSeconds,
1895 d_value.datetime.hours =
static_cast<blpapi_UChar_t
>(newHours);
1896 d_value.datetime.minutes =
static_cast<blpapi_UChar_t
>(newMinutes);
1897 d_value.datetime.seconds =
static_cast<blpapi_UChar_t
>(newSeconds);
1898 d_value.datetime.milliSeconds
1899 =
static_cast<blpapi_UInt16_t
>(fractionOfSecond.
d_usec / 1000);
1900 d_value.picoseconds =
static_cast<blpapi_UInt32_t
>(
1901 fractionOfSecond.
d_usec % 1000 * 1000 * 1000);
1906 unsigned newMinutes,
1907 unsigned newSeconds,
1910 d_value.datetime.hours =
static_cast<blpapi_UChar_t
>(newHours);
1911 d_value.datetime.minutes =
static_cast<blpapi_UChar_t
>(newMinutes);
1912 d_value.datetime.seconds =
static_cast<blpapi_UChar_t
>(newSeconds);
1913 d_value.datetime.milliSeconds =
static_cast<blpapi_UInt16_t
>(
1914 fractionOfSecond.
d_nsec / 1000 / 1000);
1915 d_value.picoseconds =
static_cast<blpapi_UInt32_t
>(
1916 fractionOfSecond.
d_nsec % (1000 * 1000) * 1000);
1921 unsigned newMinutes,
1922 unsigned newSeconds,
1925 d_value.datetime.hours =
static_cast<blpapi_UChar_t
>(newHours);
1926 d_value.datetime.minutes =
static_cast<blpapi_UChar_t
>(newMinutes);
1927 d_value.datetime.seconds =
static_cast<blpapi_UChar_t
>(newSeconds);
1928 d_value.datetime.milliSeconds =
static_cast<blpapi_UInt16_t
>(
1929 fractionOfSecond.
d_psec / 1000 / 1000 / 1000);
1930 d_value.picoseconds =
static_cast<blpapi_UInt32_t
>(
1931 fractionOfSecond.
d_psec % (1000 * 1000 * 1000));
1937 d_value.datetime.offset = value;
1943 d_value.datetime.year =
static_cast<blpapi_UInt16_t
>(value);
1949 d_value.datetime.month =
static_cast<blpapi_UChar_t
>(value);
1955 d_value.datetime.day =
static_cast<blpapi_UChar_t
>(value);
1961 d_value.datetime.hours =
static_cast<blpapi_UChar_t
>(value);
1967 d_value.datetime.minutes =
static_cast<blpapi_UChar_t
>(value);
1973 d_value.datetime.seconds =
static_cast<blpapi_UChar_t
>(value);
1979 d_value.datetime.milliSeconds =
static_cast<blpapi_UInt16_t
>(value);
1980 d_value.picoseconds = 0;
1986 d_value.datetime.milliSeconds =
static_cast<blpapi_UInt16_t
>(value.
d_msec);
1987 d_value.picoseconds = 0;
1993 d_value.datetime.milliSeconds
1994 =
static_cast<blpapi_UInt16_t
>(value.
d_usec / 1000);
1996 =
static_cast<blpapi_UInt32_t
>(value.
d_usec % 1000 * 1000 * 1000);
2002 d_value.datetime.milliSeconds
2003 =
static_cast<blpapi_UInt16_t
>(value.
d_nsec / 1000 / 1000);
2004 d_value.picoseconds =
static_cast<blpapi_UInt32_t
>(
2005 value.
d_nsec % (1000 * 1000) * 1000);
2011 d_value.datetime.milliSeconds
2012 =
static_cast<blpapi_UInt16_t
>(value.
d_psec / 1000 / 1000 / 1000);
2013 d_value.picoseconds =
static_cast<blpapi_UInt32_t
>(
2014 value.
d_psec % (1000 * 1000 * 1000));
2027 return newParts == (d_value.datetime.parts & newParts);
2046 return d_value.datetime.milliSeconds;
2051 return d_value.datetime.milliSeconds;
2056 return d_value.datetime.milliSeconds * 1000
2057 + d_value.picoseconds / 1000 / 1000;
2062 return d_value.datetime.milliSeconds * 1000 * 1000
2063 + d_value.picoseconds / 1000;
2068 return d_value.datetime.milliSeconds * 1000LLU * 1000U * 1000U
2069 + d_value.picoseconds;
2076 return d_value.datetime;
2079inline const blpapi_HighPrecisionDatetime_t&
2095 static_cast<int>(
month()),
2096 static_cast<int>(
day()))) {
2109 && (
picoseconds() >= 1000LL * 1000 * 1000 * 1000)) {
2116 std::ostream& stream,
int level,
int spacesPerLevel)
const
2118 BLPAPI_CALL_HIGHPRECISIONDATETIME_PRINT(&d_value,
2129 return (BLPAPI_CALL_HIGHPRECISIONDATETIME_COMPARE(
2139 return !(lhs == rhs);
2144 return (BLPAPI_CALL_HIGHPRECISIONDATETIME_COMPARE(
2151 return !(rhs < lhs);
2161 return !(lhs < rhs);
2166 return datetime.
print(stream, 0, -1);
2176 blpapi_HighPrecisionDatetime_t highPrecisionDatetime;
2177 BLPAPI_CALL_HIGHPRECISIONDATETIME_FROMTIMEPOINT(
2179 return Datetime(highPrecisionDatetime);
Provide functions for dispatchtbl.
Common definitions used by the library.
Defines Exceptions that can be thrown by the blpapi library.
A signature for callback on print and default C++ implementation.
Provide a time point with respect to an epoch.
Definition blpapi_datetime.h:312
void setOffset(short minutesAheadOfUTC)
Definition blpapi_datetime.h:1935
bool hasParts(unsigned parts) const
Definition blpapi_datetime.h:2025
unsigned microseconds() const
Definition blpapi_datetime.h:2054
static bool isValidTime(int hours, int minutes, int seconds)
Definition blpapi_datetime.h:1335
void setDate(unsigned year, unsigned month, unsigned day)
Definition blpapi_datetime.h:1840
unsigned month() const
Definition blpapi_datetime.h:2034
short offset() const
Definition blpapi_datetime.h:2072
void setHours(unsigned value)
Definition blpapi_datetime.h:1959
blpapi_HighPrecisionDatetime_t & rawHighPrecisionValue()
Definition blpapi_datetime.h:2020
unsigned milliSeconds() const
Definition blpapi_datetime.h:2044
blpapi_HighPrecisionDatetime_t HighPrecision
Definition blpapi_datetime.h:338
unsigned nanoseconds() const
Definition blpapi_datetime.h:2060
void setFractionOfSecond(Milliseconds value)
Definition blpapi_datetime.h:1984
unsigned long long picoseconds() const
Definition blpapi_datetime.h:2066
void setMonth(unsigned value)
Definition blpapi_datetime.h:1947
void setYear(unsigned value)
Definition blpapi_datetime.h:1941
unsigned minutes() const
Definition blpapi_datetime.h:2040
Datetime & operator=(const Datetime &rhs)
Definition blpapi_datetime.h:1834
blpapi_Datetime_t & rawValue()
Definition blpapi_datetime.h:2018
unsigned day() const
Definition blpapi_datetime.h:2036
static Datetime createDate(unsigned year, unsigned month, unsigned day)
Definition blpapi_datetime.h:1509
bool isValid() const
Definition blpapi_datetime.h:2090
std::ostream & print(std::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition blpapi_datetime.h:2115
unsigned milliseconds() const
Definition blpapi_datetime.h:2049
unsigned parts() const
Definition blpapi_datetime.h:2030
void setDay(unsigned value)
Definition blpapi_datetime.h:1953
static Datetime createDatetime(unsigned year, unsigned month, unsigned day, unsigned hours, unsigned minutes, unsigned seconds)
Definition blpapi_datetime.h:1382
Datetime()
Definition blpapi_datetime.h:1627
unsigned year() const
Definition blpapi_datetime.h:2032
static Datetime createTime(unsigned hours, unsigned minutes, unsigned seconds)
Definition blpapi_datetime.h:1515
const HighPrecision & highPrecisionValue() const
Definition blpapi_datetime.h:2085
void setMilliseconds(unsigned milliseconds)
Definition blpapi_datetime.h:1977
void setMinutes(unsigned value)
Definition blpapi_datetime.h:1965
unsigned seconds() const
Definition blpapi_datetime.h:2042
unsigned hours() const
Definition blpapi_datetime.h:2038
void setTime(unsigned hours, unsigned minutes, unsigned seconds)
Definition blpapi_datetime.h:1849
static bool isValidDate(int year, int month, int day)
Definition blpapi_datetime.h:1282
void setSeconds(unsigned value)
Definition blpapi_datetime.h:1971
blpapi_TimePoint_t TimePoint
Time point type alias.
Definition blpapi_timepoint.h:162
Definition blpapi_abstractsession.h:452
bool operator==(const CorrelationId &lhs, const CorrelationId &rhs)
Definition blpapi_correlationid.h:718
bool operator>(const Datetime &lhs, const Datetime &rhs)
Definition blpapi_datetime.h:2154
bool operator<=(const Datetime &lhs, const Datetime &rhs)
Definition blpapi_datetime.h:2149
bool operator>=(const Datetime &lhs, const Datetime &rhs)
Definition blpapi_datetime.h:2159
std::ostream & operator<<(std::ostream &os, const CorrelationId &correlator)
Definition blpapi_correlationid.h:761
bool operator!=(const CorrelationId &lhs, const CorrelationId &rhs)
Definition blpapi_correlationid.h:741
bool operator<(const CorrelationId &lhs, const CorrelationId &rhs)
Definition blpapi_correlationid.h:746
Definition blpapi_abstractsession.h:451
Definition blpapi_datetime.h:256
Value
Definition blpapi_datetime.h:263
@ DATE
year, month, and day are set
Definition blpapi_datetime.h:278
@ MILLISECONDS
MILLISECONDS is a (legacy) synonym for FRACSECONDS
Definition blpapi_datetime.h:275
@ MINUTES
minutes is set
Definition blpapi_datetime.h:270
@ HOURS
hours is set
Definition blpapi_datetime.h:269
@ SECONDS
seconds is set
Definition blpapi_datetime.h:271
@ DAY
day is set
Definition blpapi_datetime.h:267
@ MONTH
month is set
Definition blpapi_datetime.h:266
@ OFFSET
offset is set
Definition blpapi_datetime.h:268
@ YEAR
year is set
Definition blpapi_datetime.h:265
@ FRACSECONDS
fraction-of-second (both millisecond and picosecond) is set
Definition blpapi_datetime.h:272
@ TIMEFRACSECONDS
hours, minutes, seconds, and fraction-of-second are set
Definition blpapi_datetime.h:284
@ TIME
hours, minutes, and seconds are set
Definition blpapi_datetime.h:281
@ TIMEMILLI
TIMEMILLI is a (legacy) synonym for TIMEFRACSECONDS
Definition blpapi_datetime.h:287
Definition blpapi_datetime.h:1178
static Datetime fromTimePoint(const TimePoint &timePoint, Datetime::Offset offset=Datetime::Offset(0))
Definition blpapi_datetime.h:2173
Definition blpapi_datetime.h:346
Microseconds(int microseconds)
Definition blpapi_datetime.h:1262
int d_usec
Definition blpapi_datetime.h:347
Definition blpapi_datetime.h:339
int d_msec
Definition blpapi_datetime.h:340
Milliseconds(int milliseconds)
Definition blpapi_datetime.h:1257
Definition blpapi_datetime.h:354
int d_nsec
Definition blpapi_datetime.h:355
Nanoseconds(int nanoseconds)
Definition blpapi_datetime.h:1267
Definition blpapi_datetime.h:370
Offset(short minutesAheadOfUTC)
Definition blpapi_datetime.h:1277
short d_minutesAheadOfUTC
Definition blpapi_datetime.h:371
Definition blpapi_datetime.h:362
long long d_psec
Definition blpapi_datetime.h:363
Picoseconds(long long picoseconds)
Definition blpapi_datetime.h:1272
static int writeToStream(const char *data, int length, void *stream)
Definition blpapi_streamproxy.h:108