BLPAPI C++ 3.26.7
Loading...
Searching...
No Matches
blpapi_datetime.h
Go to the documentation of this file.
1/* Copyright 2012. Bloomberg Finance L.P.
2 *
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
4 * of this software and associated documentation files (the "Software"), to
5 * deal in the Software without restriction, including without limitation the
6 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7 * sell copies of the Software, and to permit persons to whom the Software is
8 * furnished to do so, subject to the following conditions: The above
9 * copyright notice and this permission notice shall be included in all copies
10 * or substantial portions of the Software.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
17 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
18 * IN THE SOFTWARE.
19 */
20
37
38#ifndef INCLUDED_BLPAPI_DATETIME
39#define INCLUDED_BLPAPI_DATETIME
82
83#include <blpapi_call.h>
84#include <blpapi_defs.h>
85#include <blpapi_exception.h>
86#include <blpapi_streamproxy.h>
87#include <blpapi_timepoint.h>
88#include <blpapi_types.h>
89
90#ifdef __cplusplus
91extern "C" {
92#endif
93
95
98
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;
112 blpapi_UChar_t day;
113 blpapi_UInt16_t year;
114 blpapi_Int16_t offset;
115};
116
123struct blpapi_HighPrecisionDatetime_tag {
124 blpapi_Datetime_t datetime;
125 blpapi_UInt32_t picoseconds;
126};
127
129typedef struct blpapi_HighPrecisionDatetime_tag blpapi_HighPrecisionDatetime_t;
130
146BLPAPI_EXPORT
147int blpapi_Datetime_compare(blpapi_Datetime_t lhs, blpapi_Datetime_t rhs);
148
164BLPAPI_EXPORT
165int blpapi_Datetime_print(const blpapi_Datetime_t *datetime,
166 blpapi_StreamWriter_t streamWriter,
167 void *stream,
168 int level,
169 int spacesPerLevel);
170
184BLPAPI_EXPORT
185int blpapi_HighPrecisionDatetime_compare(
186 const blpapi_HighPrecisionDatetime_t *lhs,
187 const blpapi_HighPrecisionDatetime_t *rhs);
188
206BLPAPI_EXPORT
207int blpapi_HighPrecisionDatetime_print(
208 const blpapi_HighPrecisionDatetime_t *datetime,
209 blpapi_StreamWriter_t streamWriter,
210 void *stream,
211 int level,
212 int spacesPerLevel);
213
227BLPAPI_EXPORT
228int blpapi_HighPrecisionDatetime_fromTimePoint(
229 blpapi_HighPrecisionDatetime_t *datetime,
230 const blpapi_TimePoint_t *timePoint,
231 short offset);
232
235
236#ifdef __cplusplus
237} // extern "C"
238
239#include <cassert>
240#include <cstring> // for std::memset
241#include <iosfwd>
242
243namespace BloombergLP {
244namespace blpapi {
251
260
266 enum Value {
267
268 YEAR = BLPAPI_DATETIME_YEAR_PART,
269 MONTH = BLPAPI_DATETIME_MONTH_PART,
270 DAY = BLPAPI_DATETIME_DAY_PART,
271 OFFSET = BLPAPI_DATETIME_OFFSET_PART,
272 HOURS = BLPAPI_DATETIME_HOURS_PART,
273 MINUTES = BLPAPI_DATETIME_MINUTES_PART,
274 SECONDS = BLPAPI_DATETIME_SECONDS_PART,
275 FRACSECONDS = BLPAPI_DATETIME_FRACSECONDS_PART,
277
278 MILLISECONDS = BLPAPI_DATETIME_MILLISECONDS_PART,
280
281 DATE = BLPAPI_DATETIME_DATE_PART,
283
284 TIME = BLPAPI_DATETIME_TIME_PART,
286
287 TIMEFRACSECONDS = BLPAPI_DATETIME_TIMEFRACSECONDS_PART,
289
290 TIMEMILLI = BLPAPI_DATETIME_TIMEMILLI_PART,
292 };
293};
294
315class Datetime {
316
317 blpapi_HighPrecisionDatetime_t d_value;
318
319 static bool isLeapYear(int year);
320
321 struct TimeTag { };
322 Datetime(unsigned hours, unsigned minutes, unsigned seconds, TimeTag);
339
340 public:
341 typedef blpapi_HighPrecisionDatetime_t HighPrecision;
344 explicit Milliseconds(int milliseconds);
348 };
351 explicit Microseconds(int microseconds);
356 };
357 struct Nanoseconds {
359 explicit Nanoseconds(int nanoseconds);
364 };
365 struct Picoseconds {
366 long long d_psec;
367 explicit Picoseconds(long long picoseconds);
372 };
373 struct Offset {
375 explicit Offset(short minutesAheadOfUTC);
380 };
381
382 static bool isValidDate(int year, int month, int day);
390
391 static bool isValidTime(int hours, int minutes, int seconds);
392 static bool isValidTime(
393 int hours, int minutes, int seconds, int milliSeconds);
394 static bool isValidTime(int hours,
395 int minutes,
396 int seconds,
397 Milliseconds fractionOfSecond);
398 static bool isValidTime(int hours,
399 int minutes,
400 int seconds,
401 Microseconds fractionOfSecond);
402 static bool isValidTime(
403 int hours, int minutes, int seconds, Nanoseconds fractionOfSecond);
404 static bool isValidTime(
405 int hours, int minutes, int seconds, Picoseconds fractionOfSecond);
414
415 static Datetime createDatetime(unsigned year,
416 unsigned month,
417 unsigned day,
418 unsigned hours,
419 unsigned minutes,
420 unsigned seconds);
434
435 static Datetime createDatetime(unsigned year,
436 unsigned month,
437 unsigned day,
438 unsigned hours,
439 unsigned minutes,
440 unsigned seconds,
441 Offset offset);
456
457 static Datetime createDatetime(unsigned year,
458 unsigned month,
459 unsigned day,
460 unsigned hours,
461 unsigned minutes,
462 unsigned seconds,
463 Milliseconds fractionOfSecond);
464 static Datetime createDatetime(unsigned year,
465 unsigned month,
466 unsigned day,
467 unsigned hours,
468 unsigned minutes,
469 unsigned seconds,
470 Microseconds fractionOfSecond);
471 static Datetime createDatetime(unsigned year,
472 unsigned month,
473 unsigned day,
474 unsigned hours,
475 unsigned minutes,
476 unsigned seconds,
477 Nanoseconds fractionOfSecond);
478 static Datetime createDatetime(unsigned year,
479 unsigned month,
480 unsigned day,
481 unsigned hours,
482 unsigned minutes,
483 unsigned seconds,
484 Picoseconds fractionOfSecond);
499
500 static Datetime createDatetime(unsigned year,
501 unsigned month,
502 unsigned day,
503 unsigned hours,
504 unsigned minutes,
505 unsigned seconds,
506 Milliseconds fractionOfSecond,
507 Offset offset);
508 static Datetime createDatetime(unsigned year,
509 unsigned month,
510 unsigned day,
511 unsigned hours,
512 unsigned minutes,
513 unsigned seconds,
514 Microseconds fractionOfSecond,
515 Offset offset);
516 static Datetime createDatetime(unsigned year,
517 unsigned month,
518 unsigned day,
519 unsigned hours,
520 unsigned minutes,
521 unsigned seconds,
522 Nanoseconds fractionOfSecond,
523 Offset offset);
524 static Datetime createDatetime(unsigned year,
525 unsigned month,
526 unsigned day,
527 unsigned hours,
528 unsigned minutes,
529 unsigned seconds,
530 Picoseconds fractionOfSecond,
531 Offset offset);
545
546 static Datetime createDate(unsigned year, unsigned month, unsigned day);
556
557 static Datetime createTime(
558 unsigned hours, unsigned minutes, unsigned seconds);
569
570 static Datetime createTime(
571 unsigned hours, unsigned minutes, unsigned seconds, Offset offset);
583
584 static Datetime createTime(unsigned hours,
585 unsigned minutes,
586 unsigned seconds,
587 unsigned milliseconds);
598
599 static Datetime createTime(unsigned hours,
600 unsigned minutes,
601 unsigned seconds,
602 unsigned milliseconds,
603 Offset offset);
615
616 static Datetime createTime(unsigned hours,
617 unsigned minutes,
618 unsigned seconds,
619 Milliseconds fractionOfSecond);
620 static Datetime createTime(unsigned hours,
621 unsigned minutes,
622 unsigned seconds,
623 Microseconds fractionOfSecond);
624 static Datetime createTime(unsigned hours,
625 unsigned minutes,
626 unsigned seconds,
627 Nanoseconds fractionOfSecond);
628 static Datetime createTime(unsigned hours,
629 unsigned minutes,
630 unsigned seconds,
631 Picoseconds fractionOfSecond);
642
643 static Datetime createTime(unsigned hours,
644 unsigned minutes,
645 unsigned seconds,
646 Milliseconds fractionOfSecond,
647 Offset offset);
648 static Datetime createTime(unsigned hours,
649 unsigned minutes,
650 unsigned seconds,
651 Microseconds fractionOfSecond,
652 Offset offset);
653 static Datetime createTime(unsigned hours,
654 unsigned minutes,
655 unsigned seconds,
656 Nanoseconds fractionOfSecond,
657 Offset offset);
658 static Datetime createTime(unsigned hours,
659 unsigned minutes,
660 unsigned seconds,
661 Picoseconds fractionOfSecond,
662 Offset offset);
674
675 Datetime();
679
680 Datetime(const Datetime& original);
684
685 explicit Datetime(const blpapi_Datetime_t& rawValue);
686
687 explicit Datetime(const blpapi_HighPrecisionDatetime_t& rawValue);
688
689 Datetime(unsigned year,
690 unsigned month,
691 unsigned day,
692 unsigned hours,
693 unsigned minutes,
694 unsigned seconds);
710
711 Datetime(unsigned year,
712 unsigned month,
713 unsigned day,
714 unsigned hours,
715 unsigned minutes,
716 unsigned seconds,
717 unsigned milliseconds);
733
734 Datetime(unsigned year,
735 unsigned month,
736 unsigned day,
737 unsigned hours,
738 unsigned minutes,
739 unsigned seconds,
740 Milliseconds fractionOfSecond);
741 Datetime(unsigned year,
742 unsigned month,
743 unsigned day,
744 unsigned hours,
745 unsigned minutes,
746 unsigned seconds,
747 Microseconds fractionOfSecond);
748 Datetime(unsigned year,
749 unsigned month,
750 unsigned day,
751 unsigned hours,
752 unsigned minutes,
753 unsigned seconds,
754 Nanoseconds fractionOfSecond);
755 Datetime(unsigned year,
756 unsigned month,
757 unsigned day,
758 unsigned hours,
759 unsigned minutes,
760 unsigned seconds,
761 Picoseconds fractionOfSecond);
778
779 Datetime(unsigned year, unsigned month, unsigned day);
794
795 Datetime(unsigned hours,
796 unsigned minutes,
797 unsigned seconds,
798 unsigned milliseconds);
811
812 Datetime(unsigned hours,
813 unsigned minutes,
814 unsigned seconds,
815 Milliseconds fractionOfSecond);
816 Datetime(unsigned hours,
817 unsigned minutes,
818 unsigned seconds,
819 Microseconds fractionOfSecond);
820 Datetime(unsigned hours,
821 unsigned minutes,
822 unsigned seconds,
823 Nanoseconds fractionOfSecond);
824 Datetime(unsigned hours,
825 unsigned minutes,
826 unsigned seconds,
827 Picoseconds fractionOfSecond);
840
841 Datetime& operator=(const Datetime& rhs);
845
846 void setDate(unsigned year, unsigned month, unsigned day);
854
855 void setTime(unsigned hours, unsigned minutes, unsigned seconds);
864
865 void setTime(unsigned hours,
866 unsigned minutes,
867 unsigned seconds,
868 unsigned milliseconds);
877
878 void setTime(unsigned hours,
879 unsigned minutes,
880 unsigned seconds,
881 Milliseconds fractionOfSecond);
882 void setTime(unsigned hours,
883 unsigned minutes,
884 unsigned seconds,
885 Microseconds fractionOfSecond);
886 void setTime(unsigned hours,
887 unsigned minutes,
888 unsigned seconds,
889 Nanoseconds fractionOfSecond);
890 void setTime(unsigned hours,
891 unsigned minutes,
892 unsigned seconds,
893 Picoseconds fractionOfSecond);
902
903 void setOffset(short minutesAheadOfUTC);
910
911 void setYear(unsigned value);
919
920 void setMonth(unsigned value);
928
929 void setDay(unsigned value);
937
938 void setHours(unsigned value);
944
945 void setMinutes(unsigned value);
951
952 void setSeconds(unsigned value);
958
959 void setMilliseconds(unsigned milliseconds);
965
972
979
986
993
994 blpapi_Datetime_t& rawValue();
1013
1014 blpapi_HighPrecisionDatetime_t& rawHighPrecisionValue();
1025
1026 bool hasParts(unsigned parts) const;
1033
1034 unsigned parts() const;
1040
1041 unsigned year() const;
1046
1047 unsigned month() const;
1052
1053 unsigned day() const;
1058
1059 unsigned hours() const;
1064
1065 unsigned minutes() const;
1071
1072 unsigned seconds() const;
1078
1079 unsigned milliSeconds() const;
1088
1089 unsigned milliseconds() const;
1095
1096 unsigned microseconds() const;
1102
1103 unsigned nanoseconds() const;
1109
1110 unsigned long long picoseconds() const;
1116
1117 short offset() const;
1123
1124 const blpapi_Datetime_t& rawValue() const;
1129
1130 const blpapi_HighPrecisionDatetime_t& rawHighPrecisionValue() const;
1135
1136 const HighPrecision& highPrecisionValue() const;
1141
1142 bool isValid() const;
1155
1156 std::ostream& print(
1157 std::ostream& stream, int level = 0, int spacesPerLevel = 4) const;
1173};
1174
1182
1183 static Datetime fromTimePoint(const TimePoint& timePoint,
1192};
1193
1196
1197// ============================================================================
1198// INLINE FUNCTION DEFINITIONS
1199// ============================================================================
1200
1201// --------------
1202// class Datetime
1203// --------------
1204
1205// FREE OPERATORS
1206bool operator==(const Datetime& lhs, const Datetime& rhs);
1213
1214bool operator!=(const Datetime& lhs, const Datetime& rhs);
1221
1222bool operator<(const Datetime& lhs, const Datetime& rhs);
1223bool operator<=(const Datetime& lhs, const Datetime& rhs);
1224bool operator>(const Datetime& lhs, const Datetime& rhs);
1225bool operator>=(const Datetime& lhs, const Datetime& rhs);
1234
1235std::ostream& operator<<(std::ostream& stream, const Datetime& datetime);
1247
1248namespace util {
1249
1253
1254constexpr const char *to_string(DatetimeParts::Value part);
1261
1263
1264} // close namespace util
1265
1266inline bool Datetime::isLeapYear(int y)
1267{
1268 return 0 == y % 4 && (y <= 1752 || 0 != y % 100 || 0 == y % 400);
1269}
1270
1271inline Datetime::Datetime(
1272 unsigned newHours, unsigned newMinutes, unsigned newSeconds, TimeTag)
1273{
1274 std::memset(&d_value, 0, sizeof(d_value));
1275 setTime(newHours, newMinutes, newSeconds);
1276}
1277
1282
1287
1292
1297
1298inline Datetime::Offset::Offset(short minutesAheadOfUTC)
1299 : d_minutesAheadOfUTC(minutesAheadOfUTC)
1300{
1301}
1302
1303inline bool Datetime::isValidDate(int year, int month, int day)
1304{
1305 if ((year <= 0) || (year > 9999) || (month <= 0) || (month > 12)
1306 || (day <= 0) || (day > 31)) {
1307 return false;
1308 }
1309 if (year == 1752) {
1310 if (month == 9 && day > 2 && day < 14) {
1311 return false;
1312 }
1313 }
1314 if (day < 29) {
1315 return true;
1316 }
1317 switch (month) {
1318 case 1:
1319 case 3:
1320 case 5:
1321 case 7:
1322 case 8:
1323 case 10:
1324 case 12:
1325 return true;
1326
1327 case 4:
1328 case 6:
1329 case 9:
1330 case 11: {
1331 if (day > 30) {
1332 return false;
1333 } else {
1334 return true;
1335 }
1336 }
1337 case 2: {
1338 if (isLeapYear(year)) {
1339 if (day > 29) {
1340 return false;
1341 } else {
1342 return true;
1343 }
1344 } else if (day > 28) {
1345 return false;
1346 } else {
1347 return true;
1348 }
1349 }
1350 default: {
1351 return true;
1352 }
1353 }
1354}
1355
1356inline bool Datetime::isValidTime(int hours, int minutes, int seconds)
1357{
1358 return (hours >= 0) && (hours < 24) && (minutes >= 0) && (minutes < 60)
1359 && (seconds >= 0) && (seconds < 60);
1360}
1361
1363 int hours, int minutes, int seconds, int milliSeconds)
1364{
1365 return (hours >= 0) && (hours < 24) && (minutes >= 0) && (minutes < 60)
1366 && (seconds >= 0) && (seconds < 60) && (milliSeconds >= 0)
1367 && (milliSeconds < 1000);
1368}
1369
1371 int hours, int minutes, int seconds, Milliseconds fractionOfSecond)
1372{
1373 return isValidTime(hours, minutes, seconds, fractionOfSecond.d_msec);
1374}
1375
1377 int hours, int minutes, int seconds, Microseconds fractionOfSecond)
1378{
1379 return (hours >= 0) && (hours < 24) && (minutes >= 0) && (minutes < 60)
1380 && (seconds >= 0) && (seconds < 60)
1381 && (fractionOfSecond.d_usec >= 0)
1382 && (fractionOfSecond.d_usec < 1000 * 1000);
1383}
1384
1386 int hours, int minutes, int seconds, Nanoseconds fractionOfSecond)
1387{
1388 return (hours >= 0) && (hours < 24) && (minutes >= 0) && (minutes < 60)
1389 && (seconds >= 0) && (seconds < 60)
1390 && (fractionOfSecond.d_nsec >= 0)
1391 && (fractionOfSecond.d_nsec < 1000 * 1000 * 1000);
1392}
1393
1395 int hours, int minutes, int seconds, Picoseconds fractionOfSecond)
1396{
1397 return (hours >= 0) && (hours < 24) && (minutes >= 0) && (minutes < 60)
1398 && (seconds >= 0) && (seconds < 60)
1399 && (fractionOfSecond.d_psec >= 0)
1400 && (fractionOfSecond.d_psec < 1000LL * 1000 * 1000 * 1000);
1401}
1402
1403inline Datetime Datetime::createDatetime(unsigned year,
1404 unsigned month,
1405 unsigned day,
1406 unsigned hours,
1407 unsigned minutes,
1408 unsigned seconds)
1409{
1410 return Datetime(year, month, day, hours, minutes, seconds);
1411}
1412
1413inline Datetime Datetime::createDatetime(unsigned year,
1414 unsigned month,
1415 unsigned day,
1416 unsigned hours,
1417 unsigned minutes,
1418 unsigned seconds,
1419 Offset offset)
1420{
1421 Datetime dt(year, month, day, hours, minutes, seconds);
1422 dt.setOffset(offset.d_minutesAheadOfUTC);
1423 return dt;
1424}
1425
1426inline Datetime Datetime::createDatetime(unsigned year,
1427 unsigned month,
1428 unsigned day,
1429 unsigned hours,
1430 unsigned minutes,
1431 unsigned seconds,
1432 Milliseconds fractionOfSecond)
1433{
1434 return Datetime(
1435 year, month, day, hours, minutes, seconds, fractionOfSecond);
1436}
1437
1438inline Datetime Datetime::createDatetime(unsigned year,
1439 unsigned month,
1440 unsigned day,
1441 unsigned hours,
1442 unsigned minutes,
1443 unsigned seconds,
1444 Microseconds fractionOfSecond)
1445{
1446 return Datetime(
1447 year, month, day, hours, minutes, seconds, fractionOfSecond);
1448}
1449
1450inline Datetime Datetime::createDatetime(unsigned year,
1451 unsigned month,
1452 unsigned day,
1453 unsigned hours,
1454 unsigned minutes,
1455 unsigned seconds,
1456 Nanoseconds fractionOfSecond)
1457{
1458 return Datetime(
1459 year, month, day, hours, minutes, seconds, fractionOfSecond);
1460}
1461
1462inline Datetime Datetime::createDatetime(unsigned year,
1463 unsigned month,
1464 unsigned day,
1465 unsigned hours,
1466 unsigned minutes,
1467 unsigned seconds,
1468 Picoseconds fractionOfSecond)
1469{
1470 return Datetime(
1471 year, month, day, hours, minutes, seconds, fractionOfSecond);
1472}
1473
1474inline Datetime Datetime::createDatetime(unsigned year,
1475 unsigned month,
1476 unsigned day,
1477 unsigned hours,
1478 unsigned minutes,
1479 unsigned seconds,
1480 Milliseconds fractionOfSecond,
1481 Offset offset)
1482{
1483 Datetime dt(year, month, day, hours, minutes, seconds, fractionOfSecond);
1484 dt.setOffset(offset.d_minutesAheadOfUTC);
1485 return dt;
1486}
1487
1488inline Datetime Datetime::createDatetime(unsigned year,
1489 unsigned month,
1490 unsigned day,
1491 unsigned hours,
1492 unsigned minutes,
1493 unsigned seconds,
1494 Microseconds fractionOfSecond,
1495 Offset offset)
1496{
1497 Datetime dt(year, month, day, hours, minutes, seconds, fractionOfSecond);
1498 dt.setOffset(offset.d_minutesAheadOfUTC);
1499 return dt;
1500}
1501
1502inline Datetime Datetime::createDatetime(unsigned year,
1503 unsigned month,
1504 unsigned day,
1505 unsigned hours,
1506 unsigned minutes,
1507 unsigned seconds,
1508 Nanoseconds fractionOfSecond,
1509 Offset offset)
1510{
1511 Datetime dt(year, month, day, hours, minutes, seconds, fractionOfSecond);
1512 dt.setOffset(offset.d_minutesAheadOfUTC);
1513 return dt;
1514}
1515
1516inline Datetime Datetime::createDatetime(unsigned year,
1517 unsigned month,
1518 unsigned day,
1519 unsigned hours,
1520 unsigned minutes,
1521 unsigned seconds,
1522 Picoseconds fractionOfSecond,
1523 Offset offset)
1524{
1525 Datetime dt(year, month, day, hours, minutes, seconds, fractionOfSecond);
1526 dt.setOffset(offset.d_minutesAheadOfUTC);
1527 return dt;
1528}
1529
1530inline Datetime Datetime::createDate(
1531 unsigned year, unsigned month, unsigned day)
1532{
1533 return Datetime(year, month, day);
1534}
1535
1536inline Datetime Datetime::createTime(
1537 unsigned hours, unsigned minutes, unsigned seconds)
1538{
1539 return Datetime(hours, minutes, seconds, TimeTag());
1540}
1541
1542inline Datetime Datetime::createTime(
1543 unsigned hours, unsigned minutes, unsigned seconds, Offset offset)
1544{
1545 Datetime dt(hours, minutes, seconds, TimeTag());
1546 dt.setOffset(offset.d_minutesAheadOfUTC);
1547 return dt;
1548}
1549
1550inline Datetime Datetime::createTime(unsigned hours,
1551 unsigned minutes,
1552 unsigned seconds,
1553 unsigned milliseconds)
1554{
1556}
1557
1558inline
1559
1560 Datetime
1562 unsigned minutes,
1563 unsigned seconds,
1564 unsigned milliseconds,
1565 Offset offset)
1566{
1567 Datetime dt(hours, minutes, seconds, milliseconds);
1568 dt.setOffset(offset.d_minutesAheadOfUTC);
1569 return dt;
1570}
1571
1572inline Datetime Datetime::createTime(unsigned hours,
1573 unsigned minutes,
1574 unsigned seconds,
1575 Milliseconds fractionOfSecond)
1576{
1577 return Datetime(hours, minutes, seconds, fractionOfSecond);
1578}
1579
1580inline Datetime Datetime::createTime(unsigned hours,
1581 unsigned minutes,
1582 unsigned seconds,
1583 Microseconds fractionOfSecond)
1584{
1585 return Datetime(hours, minutes, seconds, fractionOfSecond);
1586}
1587
1588inline Datetime Datetime::createTime(unsigned hours,
1589 unsigned minutes,
1590 unsigned seconds,
1591 Nanoseconds fractionOfSecond)
1592{
1593 return Datetime(hours, minutes, seconds, fractionOfSecond);
1594}
1595
1596inline Datetime Datetime::createTime(unsigned hours,
1597 unsigned minutes,
1598 unsigned seconds,
1599 Picoseconds fractionOfSecond)
1600{
1601 return Datetime(hours, minutes, seconds, fractionOfSecond);
1602}
1603
1604inline Datetime Datetime::createTime(unsigned hours,
1605 unsigned minutes,
1606 unsigned seconds,
1607 Milliseconds fractionOfSecond,
1608 Offset offset)
1609{
1610 Datetime dt(hours, minutes, seconds, fractionOfSecond);
1611 dt.setOffset(offset.d_minutesAheadOfUTC);
1612 return dt;
1613}
1614
1615inline Datetime Datetime::createTime(unsigned hours,
1616 unsigned minutes,
1617 unsigned seconds,
1618 Microseconds fractionOfSecond,
1619 Offset offset)
1620{
1621 Datetime dt(hours, minutes, seconds, fractionOfSecond);
1622 dt.setOffset(offset.d_minutesAheadOfUTC);
1623 return dt;
1624}
1625
1626inline Datetime Datetime::createTime(unsigned hours,
1627 unsigned minutes,
1628 unsigned seconds,
1629 Nanoseconds fractionOfSecond,
1630 Offset offset)
1631{
1632 Datetime dt(hours, minutes, seconds, fractionOfSecond);
1633 dt.setOffset(offset.d_minutesAheadOfUTC);
1634 return dt;
1635}
1636
1637inline Datetime Datetime::createTime(unsigned hours,
1638 unsigned minutes,
1639 unsigned seconds,
1640 Picoseconds fractionOfSecond,
1641 Offset offset)
1642{
1643 Datetime dt(hours, minutes, seconds, fractionOfSecond);
1644 dt.setOffset(offset.d_minutesAheadOfUTC);
1645 return dt;
1646}
1647
1649{
1650 std::memset(&d_value, 0, sizeof(d_value));
1651 d_value.datetime.year = 1;
1652 d_value.datetime.month = 1;
1653 d_value.datetime.day = 1;
1654}
1655
1656inline Datetime::Datetime(const Datetime& original)
1657 : d_value(original.d_value)
1658{
1659}
1660
1661inline Datetime::Datetime(const blpapi_Datetime_t& newRawValue)
1662{
1663 d_value.datetime = newRawValue;
1664 d_value.picoseconds = 0;
1665}
1666
1667inline Datetime::Datetime(const blpapi_HighPrecisionDatetime_t& newRawValue)
1668 : d_value(newRawValue)
1669{
1670}
1671
1672inline Datetime::Datetime(unsigned newYear,
1673 unsigned newMonth,
1674 unsigned newDay,
1675 unsigned newHours,
1676 unsigned newMinutes,
1677 unsigned newSeconds)
1678{
1679 d_value.datetime.offset = 0;
1680 d_value.datetime.year = static_cast<blpapi_UInt16_t>(newYear);
1681 d_value.datetime.month = static_cast<blpapi_UChar_t>(newMonth);
1682 d_value.datetime.day = static_cast<blpapi_UChar_t>(newDay);
1683 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1684 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1685 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1686 d_value.datetime.milliSeconds = 0;
1687 d_value.picoseconds = 0;
1688 d_value.datetime.parts = DatetimeParts::DATE | DatetimeParts::TIME;
1689}
1690
1691inline Datetime::Datetime(unsigned newYear,
1692 unsigned newMonth,
1693 unsigned newDay,
1694 unsigned newHours,
1695 unsigned newMinutes,
1696 unsigned newSeconds,
1697 unsigned newMilliSeconds)
1698{
1699 d_value.datetime.offset = 0;
1700 d_value.datetime.year = static_cast<blpapi_UInt16_t>(newYear);
1701 d_value.datetime.month = static_cast<blpapi_UChar_t>(newMonth);
1702 d_value.datetime.day = static_cast<blpapi_UChar_t>(newDay);
1703 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1704 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1705 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1706 d_value.datetime.milliSeconds
1707 = static_cast<blpapi_UInt16_t>(newMilliSeconds);
1708 d_value.picoseconds = 0;
1709 d_value.datetime.parts
1711}
1712
1713inline Datetime::Datetime(unsigned newYear,
1714 unsigned newMonth,
1715 unsigned newDay,
1716 unsigned newHours,
1717 unsigned newMinutes,
1718 unsigned newSeconds,
1719 Milliseconds fractionOfSecond)
1720{
1721 d_value.datetime.offset = 0;
1722 d_value.datetime.year = static_cast<blpapi_UInt16_t>(newYear);
1723 d_value.datetime.month = static_cast<blpapi_UChar_t>(newMonth);
1724 d_value.datetime.day = static_cast<blpapi_UChar_t>(newDay);
1725 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1726 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1727 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1728 d_value.datetime.milliSeconds
1729 = static_cast<blpapi_UInt16_t>(fractionOfSecond.d_msec);
1730 d_value.picoseconds = 0;
1731 d_value.datetime.parts
1733}
1734
1735inline Datetime::Datetime(unsigned newYear,
1736 unsigned newMonth,
1737 unsigned newDay,
1738 unsigned newHours,
1739 unsigned newMinutes,
1740 unsigned newSeconds,
1741 Microseconds fractionOfSecond)
1742{
1743 d_value.datetime.offset = 0;
1744 d_value.datetime.year = static_cast<blpapi_UInt16_t>(newYear);
1745 d_value.datetime.month = static_cast<blpapi_UChar_t>(newMonth);
1746 d_value.datetime.day = static_cast<blpapi_UChar_t>(newDay);
1747 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1748 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1749 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1750 d_value.datetime.milliSeconds
1751 = static_cast<blpapi_UInt16_t>(fractionOfSecond.d_usec / 1000);
1752 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
1753 (fractionOfSecond.d_usec % 1000) * 1000 * 1000);
1754 d_value.datetime.parts
1756}
1757
1758inline Datetime::Datetime(unsigned newYear,
1759 unsigned newMonth,
1760 unsigned newDay,
1761 unsigned newHours,
1762 unsigned newMinutes,
1763 unsigned newSeconds,
1764 Nanoseconds fractionOfSecond)
1765{
1766 d_value.datetime.offset = 0;
1767 d_value.datetime.year = static_cast<blpapi_UInt16_t>(newYear);
1768 d_value.datetime.month = static_cast<blpapi_UChar_t>(newMonth);
1769 d_value.datetime.day = static_cast<blpapi_UChar_t>(newDay);
1770 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1771 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1772 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1773 d_value.datetime.milliSeconds = static_cast<blpapi_UInt16_t>(
1774 fractionOfSecond.d_nsec / 1000 / 1000);
1775 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
1776 (fractionOfSecond.d_nsec % (1000 * 1000)) * 1000);
1777 d_value.datetime.parts
1779}
1780
1781inline Datetime::Datetime(unsigned newYear,
1782 unsigned newMonth,
1783 unsigned newDay,
1784 unsigned newHours,
1785 unsigned newMinutes,
1786 unsigned newSeconds,
1787 Picoseconds fractionOfSecond)
1788{
1789 d_value.datetime.offset = 0;
1790 d_value.datetime.year = static_cast<blpapi_UInt16_t>(newYear);
1791 d_value.datetime.month = static_cast<blpapi_UChar_t>(newMonth);
1792 d_value.datetime.day = static_cast<blpapi_UChar_t>(newDay);
1793 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1794 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1795 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1796 d_value.datetime.milliSeconds = static_cast<blpapi_UInt16_t>(
1797 fractionOfSecond.d_psec / 1000 / 1000 / 1000);
1798 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
1799 fractionOfSecond.d_psec % (1000 * 1000 * 1000));
1800 d_value.datetime.parts
1802}
1803
1804inline Datetime::Datetime(unsigned newYear, unsigned newMonth, unsigned newDay)
1805{
1806 std::memset(&d_value, 0, sizeof(d_value));
1807 setDate(newYear, newMonth, newDay);
1808}
1809
1810inline Datetime::Datetime(unsigned newHours,
1811 unsigned newMinutes,
1812 unsigned newSeconds,
1813 unsigned newMilliSeconds)
1814{
1815 std::memset(&d_value, 0, sizeof(d_value));
1816 setTime(newHours, newMinutes, newSeconds, newMilliSeconds);
1817}
1818
1819inline Datetime::Datetime(unsigned newHours,
1820 unsigned newMinutes,
1821 unsigned newSeconds,
1822 Milliseconds fractionOfSecond)
1823{
1824 std::memset(&d_value, 0, sizeof(d_value));
1825 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1826}
1827
1828inline Datetime::Datetime(unsigned newHours,
1829 unsigned newMinutes,
1830 unsigned newSeconds,
1831 Microseconds fractionOfSecond)
1832{
1833 std::memset(&d_value, 0, sizeof(d_value));
1834 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1835}
1836
1837inline Datetime::Datetime(unsigned newHours,
1838 unsigned newMinutes,
1839 unsigned newSeconds,
1840 Nanoseconds fractionOfSecond)
1841{
1842 std::memset(&d_value, 0, sizeof(d_value));
1843 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1844}
1845
1846inline Datetime::Datetime(unsigned newHours,
1847 unsigned newMinutes,
1848 unsigned newSeconds,
1849 Picoseconds fractionOfSecond)
1850{
1851 std::memset(&d_value, 0, sizeof(d_value));
1852 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1853}
1854
1855inline Datetime& Datetime::operator=(const Datetime& rhs)
1856{
1857 d_value = rhs.d_value;
1858 return *this;
1859}
1860
1862 unsigned newYear, unsigned newMonth, unsigned newDay)
1863{
1864 d_value.datetime.day = static_cast<blpapi_UChar_t>(newDay);
1865 d_value.datetime.month = static_cast<blpapi_UChar_t>(newMonth);
1866 d_value.datetime.year = static_cast<blpapi_UInt16_t>(newYear);
1867 d_value.datetime.parts |= DatetimeParts::DATE;
1868}
1869
1871 unsigned newHours, unsigned newMinutes, unsigned newSeconds)
1872{
1873 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1874 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1875 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1876 d_value.datetime.milliSeconds = 0;
1877 d_value.picoseconds = 0;
1878 d_value.datetime.parts = static_cast<blpapi_UChar_t>(
1879 (d_value.datetime.parts & ~DatetimeParts::FRACSECONDS)
1881}
1882
1883inline void Datetime::setTime(unsigned newHours,
1884 unsigned newMinutes,
1885 unsigned newSeconds,
1886 unsigned newMilliSeconds)
1887{
1888 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1889 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1890 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1891 d_value.datetime.milliSeconds
1892 = static_cast<blpapi_UInt16_t>(newMilliSeconds);
1893 d_value.picoseconds = 0;
1894 d_value.datetime.parts |= DatetimeParts::TIMEFRACSECONDS;
1895}
1896
1897inline void Datetime::setTime(unsigned newHours,
1898 unsigned newMinutes,
1899 unsigned newSeconds,
1900 Milliseconds fractionOfSecond)
1901{
1902 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1903 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1904 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1905 d_value.datetime.milliSeconds
1906 = static_cast<blpapi_UInt16_t>(fractionOfSecond.d_msec);
1907 d_value.picoseconds = 0;
1908 d_value.datetime.parts |= DatetimeParts::TIMEFRACSECONDS;
1909}
1910
1911inline void Datetime::setTime(unsigned newHours,
1912 unsigned newMinutes,
1913 unsigned newSeconds,
1914 Microseconds fractionOfSecond)
1915{
1916 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1917 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1918 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1919 d_value.datetime.milliSeconds
1920 = static_cast<blpapi_UInt16_t>(fractionOfSecond.d_usec / 1000);
1921 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
1922 fractionOfSecond.d_usec % 1000 * 1000 * 1000);
1923 d_value.datetime.parts |= DatetimeParts::TIMEFRACSECONDS;
1924}
1925
1926inline void Datetime::setTime(unsigned newHours,
1927 unsigned newMinutes,
1928 unsigned newSeconds,
1929 Nanoseconds fractionOfSecond)
1930{
1931 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1932 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1933 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1934 d_value.datetime.milliSeconds = static_cast<blpapi_UInt16_t>(
1935 fractionOfSecond.d_nsec / 1000 / 1000);
1936 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
1937 fractionOfSecond.d_nsec % (1000 * 1000) * 1000);
1938 d_value.datetime.parts |= DatetimeParts::TIMEFRACSECONDS;
1939}
1940
1941inline void Datetime::setTime(unsigned newHours,
1942 unsigned newMinutes,
1943 unsigned newSeconds,
1944 Picoseconds fractionOfSecond)
1945{
1946 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1947 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1948 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1949 d_value.datetime.milliSeconds = static_cast<blpapi_UInt16_t>(
1950 fractionOfSecond.d_psec / 1000 / 1000 / 1000);
1951 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
1952 fractionOfSecond.d_psec % (1000 * 1000 * 1000));
1953 d_value.datetime.parts |= DatetimeParts::TIMEFRACSECONDS;
1954}
1955
1956inline void Datetime::setOffset(short value)
1957{
1958 d_value.datetime.offset = value;
1959 d_value.datetime.parts |= DatetimeParts::OFFSET;
1960}
1961
1962inline void Datetime::setYear(unsigned value)
1963{
1964 d_value.datetime.year = static_cast<blpapi_UInt16_t>(value);
1965 d_value.datetime.parts |= DatetimeParts::YEAR;
1966}
1967
1968inline void Datetime::setMonth(unsigned value)
1969{
1970 d_value.datetime.month = static_cast<blpapi_UChar_t>(value);
1971 d_value.datetime.parts |= DatetimeParts::MONTH;
1972}
1973
1974inline void Datetime::setDay(unsigned value)
1975{
1976 d_value.datetime.day = static_cast<blpapi_UChar_t>(value);
1977 d_value.datetime.parts |= DatetimeParts::DAY;
1978}
1979
1980inline void Datetime::setHours(unsigned value)
1981{
1982 d_value.datetime.hours = static_cast<blpapi_UChar_t>(value);
1983 d_value.datetime.parts |= DatetimeParts::HOURS;
1984}
1985
1986inline void Datetime::setMinutes(unsigned value)
1987{
1988 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(value);
1989 d_value.datetime.parts |= DatetimeParts::MINUTES;
1990}
1991
1992inline void Datetime::setSeconds(unsigned value)
1993{
1994 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(value);
1995 d_value.datetime.parts |= DatetimeParts::SECONDS;
1996}
1997
1998inline void Datetime::setMilliseconds(unsigned value)
1999{
2000 d_value.datetime.milliSeconds = static_cast<blpapi_UInt16_t>(value);
2001 d_value.picoseconds = 0;
2002 d_value.datetime.parts |= DatetimeParts::FRACSECONDS;
2003}
2004
2006{
2007 d_value.datetime.milliSeconds = static_cast<blpapi_UInt16_t>(value.d_msec);
2008 d_value.picoseconds = 0;
2009 d_value.datetime.parts |= DatetimeParts::FRACSECONDS;
2010}
2011
2013{
2014 d_value.datetime.milliSeconds
2015 = static_cast<blpapi_UInt16_t>(value.d_usec / 1000);
2016 d_value.picoseconds
2017 = static_cast<blpapi_UInt32_t>(value.d_usec % 1000 * 1000 * 1000);
2018 d_value.datetime.parts |= DatetimeParts::FRACSECONDS;
2019}
2020
2022{
2023 d_value.datetime.milliSeconds
2024 = static_cast<blpapi_UInt16_t>(value.d_nsec / 1000 / 1000);
2025 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
2026 value.d_nsec % (1000 * 1000) * 1000);
2027 d_value.datetime.parts |= DatetimeParts::FRACSECONDS;
2028}
2029
2031{
2032 d_value.datetime.milliSeconds
2033 = static_cast<blpapi_UInt16_t>(value.d_psec / 1000 / 1000 / 1000);
2034 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
2035 value.d_psec % (1000 * 1000 * 1000));
2036 d_value.datetime.parts |= DatetimeParts::FRACSECONDS;
2037}
2038
2039inline blpapi_Datetime_t& Datetime::rawValue() { return d_value.datetime; }
2040
2041inline blpapi_HighPrecisionDatetime_t& Datetime::rawHighPrecisionValue()
2042{
2043 return d_value;
2044}
2045
2046inline bool Datetime::hasParts(unsigned newParts) const
2047{
2048 return newParts == (d_value.datetime.parts & newParts);
2049}
2050
2051inline unsigned Datetime::parts() const { return d_value.datetime.parts; }
2052
2053inline unsigned Datetime::year() const { return d_value.datetime.year; }
2054
2055inline unsigned Datetime::month() const { return d_value.datetime.month; }
2056
2057inline unsigned Datetime::day() const { return d_value.datetime.day; }
2058
2059inline unsigned Datetime::hours() const { return d_value.datetime.hours; }
2060
2061inline unsigned Datetime::minutes() const { return d_value.datetime.minutes; }
2062
2063inline unsigned Datetime::seconds() const { return d_value.datetime.seconds; }
2064
2065inline unsigned Datetime::milliSeconds() const
2066{
2067 return d_value.datetime.milliSeconds;
2068}
2069
2070inline unsigned Datetime::milliseconds() const
2071{
2072 return d_value.datetime.milliSeconds;
2073}
2074
2075inline unsigned Datetime::microseconds() const
2076{
2077 return d_value.datetime.milliSeconds * 1000
2078 + d_value.picoseconds / 1000 / 1000;
2079}
2080
2081inline unsigned Datetime::nanoseconds() const
2082{
2083 return d_value.datetime.milliSeconds * 1000 * 1000
2084 + d_value.picoseconds / 1000;
2085}
2086
2087inline unsigned long long Datetime::picoseconds() const
2088{
2089 return d_value.datetime.milliSeconds * 1000LLU * 1000U * 1000U
2090 + d_value.picoseconds;
2091}
2092
2093inline short Datetime::offset() const { return d_value.datetime.offset; }
2094
2095inline const blpapi_Datetime_t& Datetime::rawValue() const
2096{
2097 return d_value.datetime;
2098}
2099
2100inline const blpapi_HighPrecisionDatetime_t&
2102{
2103 return d_value;
2104}
2105
2107{
2108 return d_value;
2109}
2110
2111inline bool Datetime::isValid() const
2112{
2115 && !isValidDate(static_cast<int>(year()),
2116 static_cast<int>(month()),
2117 static_cast<int>(day()))) {
2118 return false;
2119 }
2123 && !isValidTime(static_cast<int>(hours()),
2124 static_cast<int>(minutes()),
2125 static_cast<int>(seconds()),
2126 static_cast<int>(milliSeconds()))) {
2127 return false;
2128 }
2130 && (picoseconds() >= 1000LL * 1000 * 1000 * 1000)) {
2131 return false;
2132 }
2133 return true;
2134}
2135
2136inline std::ostream& Datetime::print(
2137 std::ostream& stream, int level, int spacesPerLevel) const
2138{
2139 BLPAPI_CALL_HIGHPRECISIONDATETIME_PRINT(&d_value,
2141 &stream,
2142 level,
2143 spacesPerLevel);
2144 return stream;
2145}
2146
2147inline bool operator==(const Datetime& lhs, const Datetime& rhs)
2148{
2149 if (lhs.parts() == rhs.parts()) {
2150 return (BLPAPI_CALL_HIGHPRECISIONDATETIME_COMPARE(
2151 &lhs.rawHighPrecisionValue(),
2152 &rhs.rawHighPrecisionValue())
2153 == 0);
2154 }
2155 return false;
2156}
2157
2158inline bool operator!=(const Datetime& lhs, const Datetime& rhs)
2159{
2160 return !(lhs == rhs);
2161}
2162
2163inline bool operator<(const Datetime& lhs, const Datetime& rhs)
2164{
2165 return (BLPAPI_CALL_HIGHPRECISIONDATETIME_COMPARE(
2167 < 0);
2168}
2169
2170inline bool operator<=(const Datetime& lhs, const Datetime& rhs)
2171{
2172 return !(rhs < lhs);
2173}
2174
2175inline bool operator>(const Datetime& lhs, const Datetime& rhs)
2176{
2177 return rhs < lhs;
2178}
2179
2180inline bool operator>=(const Datetime& lhs, const Datetime& rhs)
2181{
2182 return !(lhs < rhs);
2183}
2184
2185inline std::ostream& operator<<(std::ostream& stream, const Datetime& datetime)
2186{
2187 return datetime.print(stream, 0, -1);
2188}
2189
2190// ------------------
2191// class DatetimeUtil
2192// ------------------
2193
2195 const TimePoint& timePoint, Datetime::Offset offset)
2196{
2197 blpapi_HighPrecisionDatetime_t highPrecisionDatetime;
2198 BLPAPI_CALL_HIGHPRECISIONDATETIME_FROMTIMEPOINT(
2199 &highPrecisionDatetime, &timePoint, offset.d_minutesAheadOfUTC);
2200 return Datetime(highPrecisionDatetime);
2201}
2202
2203// --------------
2204// namespace util
2205// --------------
2206constexpr const char *util::to_string(DatetimeParts::Value part)
2207{
2208 switch (part) {
2210 return "YEAR";
2212 return "MONTH";
2213 case DatetimeParts::DAY:
2214 return "DAY";
2216 return "OFFSET";
2218 return "HOURS";
2220 return "MINUTES";
2222 return "SECONDS";
2224 return "FRACSECONDS";
2226 return "DATE";
2228 return "TIME";
2230 return "TIMEFRACSECONDS";
2231 }
2232 // Silence warnings on some compilers
2233 return "UNDEFINED";
2234}
2235
2236} // close namespace blpapi
2237} // close namespace BloombergLP
2238
2239#endif // #ifdef __cplusplus
2240
2241#endif // #ifndef INCLUDED_BLPAPI_DATETIME
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.
Provide BLPAPI types.
Definition blpapi_datetime.h:315
void setOffset(short minutesAheadOfUTC)
Definition blpapi_datetime.h:1956
bool hasParts(unsigned parts) const
Definition blpapi_datetime.h:2046
unsigned microseconds() const
Definition blpapi_datetime.h:2075
static bool isValidTime(int hours, int minutes, int seconds)
Definition blpapi_datetime.h:1356
void setDate(unsigned year, unsigned month, unsigned day)
Definition blpapi_datetime.h:1861
unsigned month() const
Definition blpapi_datetime.h:2055
short offset() const
Definition blpapi_datetime.h:2093
void setHours(unsigned value)
Definition blpapi_datetime.h:1980
blpapi_HighPrecisionDatetime_t & rawHighPrecisionValue()
Definition blpapi_datetime.h:2041
unsigned milliSeconds() const
Definition blpapi_datetime.h:2065
blpapi_HighPrecisionDatetime_t HighPrecision
Definition blpapi_datetime.h:341
unsigned nanoseconds() const
Definition blpapi_datetime.h:2081
void setFractionOfSecond(Milliseconds value)
Definition blpapi_datetime.h:2005
unsigned long long picoseconds() const
Definition blpapi_datetime.h:2087
void setMonth(unsigned value)
Definition blpapi_datetime.h:1968
void setYear(unsigned value)
Definition blpapi_datetime.h:1962
unsigned minutes() const
Definition blpapi_datetime.h:2061
Datetime & operator=(const Datetime &rhs)
Definition blpapi_datetime.h:1855
blpapi_Datetime_t & rawValue()
Definition blpapi_datetime.h:2039
unsigned day() const
Definition blpapi_datetime.h:2057
static Datetime createDate(unsigned year, unsigned month, unsigned day)
Definition blpapi_datetime.h:1530
bool isValid() const
Definition blpapi_datetime.h:2111
std::ostream & print(std::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition blpapi_datetime.h:2136
unsigned milliseconds() const
Definition blpapi_datetime.h:2070
unsigned parts() const
Definition blpapi_datetime.h:2051
void setDay(unsigned value)
Definition blpapi_datetime.h:1974
static Datetime createDatetime(unsigned year, unsigned month, unsigned day, unsigned hours, unsigned minutes, unsigned seconds)
Definition blpapi_datetime.h:1403
Datetime()
Definition blpapi_datetime.h:1648
unsigned year() const
Definition blpapi_datetime.h:2053
static Datetime createTime(unsigned hours, unsigned minutes, unsigned seconds)
Definition blpapi_datetime.h:1536
const HighPrecision & highPrecisionValue() const
Definition blpapi_datetime.h:2106
void setMilliseconds(unsigned milliseconds)
Definition blpapi_datetime.h:1998
void setMinutes(unsigned value)
Definition blpapi_datetime.h:1986
unsigned seconds() const
Definition blpapi_datetime.h:2063
unsigned hours() const
Definition blpapi_datetime.h:2059
void setTime(unsigned hours, unsigned minutes, unsigned seconds)
Definition blpapi_datetime.h:1870
static bool isValidDate(int year, int month, int day)
Definition blpapi_datetime.h:1303
void setSeconds(unsigned value)
Definition blpapi_datetime.h:1992
constexpr const char * to_string(CorrelationId::ValueType valueType)
Definition blpapi_correlationid.h:830
blpapi_TimePoint_t TimePoint
Time point type alias.
Definition blpapi_timepoint.h:162
Definition blpapi_correlationid.h:499
Definition blpapi_abstractsession.h:448
bool operator==(const CorrelationId &lhs, const CorrelationId &rhs)
Definition blpapi_correlationid.h:749
bool operator>(const Datetime &lhs, const Datetime &rhs)
Definition blpapi_datetime.h:2175
bool operator<=(const Datetime &lhs, const Datetime &rhs)
Definition blpapi_datetime.h:2170
bool operator>=(const Datetime &lhs, const Datetime &rhs)
Definition blpapi_datetime.h:2180
std::ostream & operator<<(std::ostream &os, const CorrelationId &correlator)
Definition blpapi_correlationid.h:792
bool operator!=(const CorrelationId &lhs, const CorrelationId &rhs)
Definition blpapi_correlationid.h:772
bool operator<(const CorrelationId &lhs, const CorrelationId &rhs)
Definition blpapi_correlationid.h:777
Definition blpapi_abstractsession.h:447
Definition blpapi_datetime.h:259
Value
Definition blpapi_datetime.h:266
@ DATE
year, month, and day are set
Definition blpapi_datetime.h:281
@ MILLISECONDS
MILLISECONDS is a (legacy) synonym for FRACSECONDS
Definition blpapi_datetime.h:278
@ MINUTES
minutes is set
Definition blpapi_datetime.h:273
@ HOURS
hours is set
Definition blpapi_datetime.h:272
@ SECONDS
seconds is set
Definition blpapi_datetime.h:274
@ DAY
day is set
Definition blpapi_datetime.h:270
@ MONTH
month is set
Definition blpapi_datetime.h:269
@ OFFSET
offset is set
Definition blpapi_datetime.h:271
@ YEAR
year is set
Definition blpapi_datetime.h:268
@ FRACSECONDS
fraction-of-second (both millisecond and picosecond) is set
Definition blpapi_datetime.h:275
@ TIMEFRACSECONDS
hours, minutes, seconds, and fraction-of-second are set
Definition blpapi_datetime.h:287
@ TIME
hours, minutes, and seconds are set
Definition blpapi_datetime.h:284
@ TIMEMILLI
TIMEMILLI is a (legacy) synonym for TIMEFRACSECONDS
Definition blpapi_datetime.h:290
Definition blpapi_datetime.h:1181
static Datetime fromTimePoint(const TimePoint &timePoint, Datetime::Offset offset=Datetime::Offset(0))
Definition blpapi_datetime.h:2194
Definition blpapi_datetime.h:349
Microseconds(int microseconds)
Definition blpapi_datetime.h:1283
int d_usec
Definition blpapi_datetime.h:350
Definition blpapi_datetime.h:342
int d_msec
Definition blpapi_datetime.h:343
Milliseconds(int milliseconds)
Definition blpapi_datetime.h:1278
Definition blpapi_datetime.h:357
int d_nsec
Definition blpapi_datetime.h:358
Nanoseconds(int nanoseconds)
Definition blpapi_datetime.h:1288
Definition blpapi_datetime.h:373
Offset(short minutesAheadOfUTC)
Definition blpapi_datetime.h:1298
short d_minutesAheadOfUTC
Definition blpapi_datetime.h:374
Definition blpapi_datetime.h:365
long long d_psec
Definition blpapi_datetime.h:366
Picoseconds(long long picoseconds)
Definition blpapi_datetime.h:1293
static int writeToStream(const char *data, int length, void *stream)
Definition blpapi_streamproxy.h:108