BLPAPI C++ 3.26.6
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
143BLPAPI_EXPORT
144int blpapi_Datetime_compare(blpapi_Datetime_t lhs, blpapi_Datetime_t rhs);
145
161BLPAPI_EXPORT
162int blpapi_Datetime_print(const blpapi_Datetime_t *datetime,
163 blpapi_StreamWriter_t streamWriter,
164 void *stream,
165 int level,
166 int spacesPerLevel);
167
181BLPAPI_EXPORT
182int blpapi_HighPrecisionDatetime_compare(
183 const blpapi_HighPrecisionDatetime_t *lhs,
184 const blpapi_HighPrecisionDatetime_t *rhs);
185
203BLPAPI_EXPORT
204int blpapi_HighPrecisionDatetime_print(
205 const blpapi_HighPrecisionDatetime_t *datetime,
206 blpapi_StreamWriter_t streamWriter,
207 void *stream,
208 int level,
209 int spacesPerLevel);
210
224BLPAPI_EXPORT
225int blpapi_HighPrecisionDatetime_fromTimePoint(
226 blpapi_HighPrecisionDatetime_t *datetime,
227 const blpapi_TimePoint_t *timePoint,
228 short offset);
229
232
233#ifdef __cplusplus
234} // extern "C"
235
236#include <cassert>
237#include <cstring> // for std::memset
238#include <iosfwd>
239
240namespace BloombergLP {
241namespace blpapi {
248
257
263 enum Value {
264
265 YEAR = BLPAPI_DATETIME_YEAR_PART,
266 MONTH = BLPAPI_DATETIME_MONTH_PART,
267 DAY = BLPAPI_DATETIME_DAY_PART,
268 OFFSET = BLPAPI_DATETIME_OFFSET_PART,
269 HOURS = BLPAPI_DATETIME_HOURS_PART,
270 MINUTES = BLPAPI_DATETIME_MINUTES_PART,
271 SECONDS = BLPAPI_DATETIME_SECONDS_PART,
272 FRACSECONDS = BLPAPI_DATETIME_FRACSECONDS_PART,
274
275 MILLISECONDS = BLPAPI_DATETIME_MILLISECONDS_PART,
277
278 DATE = BLPAPI_DATETIME_DATE_PART,
280
281 TIME = BLPAPI_DATETIME_TIME_PART,
283
284 TIMEFRACSECONDS = BLPAPI_DATETIME_TIMEFRACSECONDS_PART,
286
287 TIMEMILLI = BLPAPI_DATETIME_TIMEMILLI_PART,
289 };
290};
291
312class Datetime {
313
314 blpapi_HighPrecisionDatetime_t d_value;
315
316 static bool isLeapYear(int year);
317
318 struct TimeTag { };
319 Datetime(unsigned hours, unsigned minutes, unsigned seconds, TimeTag);
336
337 public:
338 typedef blpapi_HighPrecisionDatetime_t HighPrecision;
341 explicit Milliseconds(int milliseconds);
345 };
348 explicit Microseconds(int microseconds);
353 };
354 struct Nanoseconds {
356 explicit Nanoseconds(int nanoseconds);
361 };
362 struct Picoseconds {
363 long long d_psec;
364 explicit Picoseconds(long long picoseconds);
369 };
370 struct Offset {
372 explicit Offset(short minutesAheadOfUTC);
377 };
378
379 static bool isValidDate(int year, int month, int day);
387
388 static bool isValidTime(int hours, int minutes, int seconds);
389 static bool isValidTime(
390 int hours, int minutes, int seconds, int milliSeconds);
391 static bool isValidTime(int hours,
392 int minutes,
393 int seconds,
394 Milliseconds fractionOfSecond);
395 static bool isValidTime(int hours,
396 int minutes,
397 int seconds,
398 Microseconds fractionOfSecond);
399 static bool isValidTime(
400 int hours, int minutes, int seconds, Nanoseconds fractionOfSecond);
401 static bool isValidTime(
402 int hours, int minutes, int seconds, Picoseconds fractionOfSecond);
411
412 static Datetime createDatetime(unsigned year,
413 unsigned month,
414 unsigned day,
415 unsigned hours,
416 unsigned minutes,
417 unsigned seconds);
431
432 static Datetime createDatetime(unsigned year,
433 unsigned month,
434 unsigned day,
435 unsigned hours,
436 unsigned minutes,
437 unsigned seconds,
438 Offset offset);
453
454 static Datetime createDatetime(unsigned year,
455 unsigned month,
456 unsigned day,
457 unsigned hours,
458 unsigned minutes,
459 unsigned seconds,
460 Milliseconds fractionOfSecond);
461 static Datetime createDatetime(unsigned year,
462 unsigned month,
463 unsigned day,
464 unsigned hours,
465 unsigned minutes,
466 unsigned seconds,
467 Microseconds fractionOfSecond);
468 static Datetime createDatetime(unsigned year,
469 unsigned month,
470 unsigned day,
471 unsigned hours,
472 unsigned minutes,
473 unsigned seconds,
474 Nanoseconds fractionOfSecond);
475 static Datetime createDatetime(unsigned year,
476 unsigned month,
477 unsigned day,
478 unsigned hours,
479 unsigned minutes,
480 unsigned seconds,
481 Picoseconds fractionOfSecond);
496
497 static Datetime createDatetime(unsigned year,
498 unsigned month,
499 unsigned day,
500 unsigned hours,
501 unsigned minutes,
502 unsigned seconds,
503 Milliseconds fractionOfSecond,
504 Offset offset);
505 static Datetime createDatetime(unsigned year,
506 unsigned month,
507 unsigned day,
508 unsigned hours,
509 unsigned minutes,
510 unsigned seconds,
511 Microseconds fractionOfSecond,
512 Offset offset);
513 static Datetime createDatetime(unsigned year,
514 unsigned month,
515 unsigned day,
516 unsigned hours,
517 unsigned minutes,
518 unsigned seconds,
519 Nanoseconds fractionOfSecond,
520 Offset offset);
521 static Datetime createDatetime(unsigned year,
522 unsigned month,
523 unsigned day,
524 unsigned hours,
525 unsigned minutes,
526 unsigned seconds,
527 Picoseconds fractionOfSecond,
528 Offset offset);
542
543 static Datetime createDate(unsigned year, unsigned month, unsigned day);
553
554 static Datetime createTime(
555 unsigned hours, unsigned minutes, unsigned seconds);
566
567 static Datetime createTime(
568 unsigned hours, unsigned minutes, unsigned seconds, Offset offset);
580
581 static Datetime createTime(unsigned hours,
582 unsigned minutes,
583 unsigned seconds,
584 unsigned milliseconds);
595
596 static Datetime createTime(unsigned hours,
597 unsigned minutes,
598 unsigned seconds,
599 unsigned milliseconds,
600 Offset offset);
612
613 static Datetime createTime(unsigned hours,
614 unsigned minutes,
615 unsigned seconds,
616 Milliseconds fractionOfSecond);
617 static Datetime createTime(unsigned hours,
618 unsigned minutes,
619 unsigned seconds,
620 Microseconds fractionOfSecond);
621 static Datetime createTime(unsigned hours,
622 unsigned minutes,
623 unsigned seconds,
624 Nanoseconds fractionOfSecond);
625 static Datetime createTime(unsigned hours,
626 unsigned minutes,
627 unsigned seconds,
628 Picoseconds fractionOfSecond);
639
640 static Datetime createTime(unsigned hours,
641 unsigned minutes,
642 unsigned seconds,
643 Milliseconds fractionOfSecond,
644 Offset offset);
645 static Datetime createTime(unsigned hours,
646 unsigned minutes,
647 unsigned seconds,
648 Microseconds fractionOfSecond,
649 Offset offset);
650 static Datetime createTime(unsigned hours,
651 unsigned minutes,
652 unsigned seconds,
653 Nanoseconds fractionOfSecond,
654 Offset offset);
655 static Datetime createTime(unsigned hours,
656 unsigned minutes,
657 unsigned seconds,
658 Picoseconds fractionOfSecond,
659 Offset offset);
671
672 Datetime();
676
677 Datetime(const Datetime& original);
681
682 explicit Datetime(const blpapi_Datetime_t& rawValue);
683
684 explicit Datetime(const blpapi_HighPrecisionDatetime_t& rawValue);
685
686 Datetime(unsigned year,
687 unsigned month,
688 unsigned day,
689 unsigned hours,
690 unsigned minutes,
691 unsigned seconds);
707
708 Datetime(unsigned year,
709 unsigned month,
710 unsigned day,
711 unsigned hours,
712 unsigned minutes,
713 unsigned seconds,
714 unsigned milliseconds);
730
731 Datetime(unsigned year,
732 unsigned month,
733 unsigned day,
734 unsigned hours,
735 unsigned minutes,
736 unsigned seconds,
737 Milliseconds fractionOfSecond);
738 Datetime(unsigned year,
739 unsigned month,
740 unsigned day,
741 unsigned hours,
742 unsigned minutes,
743 unsigned seconds,
744 Microseconds fractionOfSecond);
745 Datetime(unsigned year,
746 unsigned month,
747 unsigned day,
748 unsigned hours,
749 unsigned minutes,
750 unsigned seconds,
751 Nanoseconds fractionOfSecond);
752 Datetime(unsigned year,
753 unsigned month,
754 unsigned day,
755 unsigned hours,
756 unsigned minutes,
757 unsigned seconds,
758 Picoseconds fractionOfSecond);
775
776 Datetime(unsigned year, unsigned month, unsigned day);
791
792 Datetime(unsigned hours,
793 unsigned minutes,
794 unsigned seconds,
795 unsigned milliseconds);
808
809 Datetime(unsigned hours,
810 unsigned minutes,
811 unsigned seconds,
812 Milliseconds fractionOfSecond);
813 Datetime(unsigned hours,
814 unsigned minutes,
815 unsigned seconds,
816 Microseconds fractionOfSecond);
817 Datetime(unsigned hours,
818 unsigned minutes,
819 unsigned seconds,
820 Nanoseconds fractionOfSecond);
821 Datetime(unsigned hours,
822 unsigned minutes,
823 unsigned seconds,
824 Picoseconds fractionOfSecond);
837
838 Datetime& operator=(const Datetime& rhs);
842
843 void setDate(unsigned year, unsigned month, unsigned day);
851
852 void setTime(unsigned hours, unsigned minutes, unsigned seconds);
861
862 void setTime(unsigned hours,
863 unsigned minutes,
864 unsigned seconds,
865 unsigned milliseconds);
874
875 void setTime(unsigned hours,
876 unsigned minutes,
877 unsigned seconds,
878 Milliseconds fractionOfSecond);
879 void setTime(unsigned hours,
880 unsigned minutes,
881 unsigned seconds,
882 Microseconds fractionOfSecond);
883 void setTime(unsigned hours,
884 unsigned minutes,
885 unsigned seconds,
886 Nanoseconds fractionOfSecond);
887 void setTime(unsigned hours,
888 unsigned minutes,
889 unsigned seconds,
890 Picoseconds fractionOfSecond);
899
900 void setOffset(short minutesAheadOfUTC);
907
908 void setYear(unsigned value);
916
917 void setMonth(unsigned value);
925
926 void setDay(unsigned value);
934
935 void setHours(unsigned value);
941
942 void setMinutes(unsigned value);
948
949 void setSeconds(unsigned value);
955
956 void setMilliseconds(unsigned milliseconds);
962
969
976
983
990
991 blpapi_Datetime_t& rawValue();
1010
1011 blpapi_HighPrecisionDatetime_t& rawHighPrecisionValue();
1022
1023 bool hasParts(unsigned parts) const;
1030
1031 unsigned parts() const;
1037
1038 unsigned year() const;
1043
1044 unsigned month() const;
1049
1050 unsigned day() const;
1055
1056 unsigned hours() const;
1061
1062 unsigned minutes() const;
1068
1069 unsigned seconds() const;
1075
1076 unsigned milliSeconds() const;
1085
1086 unsigned milliseconds() const;
1092
1093 unsigned microseconds() const;
1099
1100 unsigned nanoseconds() const;
1106
1107 unsigned long long picoseconds() const;
1113
1114 short offset() const;
1120
1121 const blpapi_Datetime_t& rawValue() const;
1126
1127 const blpapi_HighPrecisionDatetime_t& rawHighPrecisionValue() const;
1132
1133 const HighPrecision& highPrecisionValue() const;
1138
1139 bool isValid() const;
1152
1153 std::ostream& print(
1154 std::ostream& stream, int level = 0, int spacesPerLevel = 4) const;
1170};
1171
1179
1180 static Datetime fromTimePoint(const TimePoint& timePoint,
1189};
1190
1193
1194// ============================================================================
1195// INLINE FUNCTION DEFINITIONS
1196// ============================================================================
1197
1198// --------------
1199// class Datetime
1200// --------------
1201
1202// FREE OPERATORS
1203bool operator==(const Datetime& lhs, const Datetime& rhs);
1210
1211bool operator!=(const Datetime& lhs, const Datetime& rhs);
1218
1219bool operator<(const Datetime& lhs, const Datetime& rhs);
1220bool operator<=(const Datetime& lhs, const Datetime& rhs);
1221bool operator>(const Datetime& lhs, const Datetime& rhs);
1222bool operator>=(const Datetime& lhs, const Datetime& rhs);
1231
1232std::ostream& operator<<(std::ostream& stream, const Datetime& datetime);
1244
1245inline bool Datetime::isLeapYear(int y)
1246{
1247 return 0 == y % 4 && (y <= 1752 || 0 != y % 100 || 0 == y % 400);
1248}
1249
1250inline Datetime::Datetime(
1251 unsigned newHours, unsigned newMinutes, unsigned newSeconds, TimeTag)
1252{
1253 std::memset(&d_value, 0, sizeof(d_value));
1254 setTime(newHours, newMinutes, newSeconds);
1255}
1256
1261
1266
1271
1276
1277inline Datetime::Offset::Offset(short minutesAheadOfUTC)
1278 : d_minutesAheadOfUTC(minutesAheadOfUTC)
1279{
1280}
1281
1282inline bool Datetime::isValidDate(int year, int month, int day)
1283{
1284 if ((year <= 0) || (year > 9999) || (month <= 0) || (month > 12)
1285 || (day <= 0) || (day > 31)) {
1286 return false;
1287 }
1288 if (year == 1752) {
1289 if (month == 9 && day > 2 && day < 14) {
1290 return false;
1291 }
1292 }
1293 if (day < 29) {
1294 return true;
1295 }
1296 switch (month) {
1297 case 1:
1298 case 3:
1299 case 5:
1300 case 7:
1301 case 8:
1302 case 10:
1303 case 12:
1304 return true;
1305
1306 case 4:
1307 case 6:
1308 case 9:
1309 case 11: {
1310 if (day > 30) {
1311 return false;
1312 } else {
1313 return true;
1314 }
1315 }
1316 case 2: {
1317 if (isLeapYear(year)) {
1318 if (day > 29) {
1319 return false;
1320 } else {
1321 return true;
1322 }
1323 } else if (day > 28) {
1324 return false;
1325 } else {
1326 return true;
1327 }
1328 }
1329 default: {
1330 return true;
1331 }
1332 }
1333}
1334
1335inline bool Datetime::isValidTime(int hours, int minutes, int seconds)
1336{
1337 return (hours >= 0) && (hours < 24) && (minutes >= 0) && (minutes < 60)
1338 && (seconds >= 0) && (seconds < 60);
1339}
1340
1342 int hours, int minutes, int seconds, int milliSeconds)
1343{
1344 return (hours >= 0) && (hours < 24) && (minutes >= 0) && (minutes < 60)
1345 && (seconds >= 0) && (seconds < 60) && (milliSeconds >= 0)
1346 && (milliSeconds < 1000);
1347}
1348
1350 int hours, int minutes, int seconds, Milliseconds fractionOfSecond)
1351{
1352 return isValidTime(hours, minutes, seconds, fractionOfSecond.d_msec);
1353}
1354
1356 int hours, int minutes, int seconds, Microseconds fractionOfSecond)
1357{
1358 return (hours >= 0) && (hours < 24) && (minutes >= 0) && (minutes < 60)
1359 && (seconds >= 0) && (seconds < 60)
1360 && (fractionOfSecond.d_usec >= 0)
1361 && (fractionOfSecond.d_usec < 1000 * 1000);
1362}
1363
1365 int hours, int minutes, int seconds, Nanoseconds fractionOfSecond)
1366{
1367 return (hours >= 0) && (hours < 24) && (minutes >= 0) && (minutes < 60)
1368 && (seconds >= 0) && (seconds < 60)
1369 && (fractionOfSecond.d_nsec >= 0)
1370 && (fractionOfSecond.d_nsec < 1000 * 1000 * 1000);
1371}
1372
1374 int hours, int minutes, int seconds, Picoseconds fractionOfSecond)
1375{
1376 return (hours >= 0) && (hours < 24) && (minutes >= 0) && (minutes < 60)
1377 && (seconds >= 0) && (seconds < 60)
1378 && (fractionOfSecond.d_psec >= 0)
1379 && (fractionOfSecond.d_psec < 1000LL * 1000 * 1000 * 1000);
1380}
1381
1382inline Datetime Datetime::createDatetime(unsigned year,
1383 unsigned month,
1384 unsigned day,
1385 unsigned hours,
1386 unsigned minutes,
1387 unsigned seconds)
1388{
1389 return Datetime(year, month, day, hours, minutes, seconds);
1390}
1391
1392inline Datetime Datetime::createDatetime(unsigned year,
1393 unsigned month,
1394 unsigned day,
1395 unsigned hours,
1396 unsigned minutes,
1397 unsigned seconds,
1398 Offset offset)
1399{
1400 Datetime dt(year, month, day, hours, minutes, seconds);
1401 dt.setOffset(offset.d_minutesAheadOfUTC);
1402 return dt;
1403}
1404
1405inline Datetime Datetime::createDatetime(unsigned year,
1406 unsigned month,
1407 unsigned day,
1408 unsigned hours,
1409 unsigned minutes,
1410 unsigned seconds,
1411 Milliseconds fractionOfSecond)
1412{
1413 return Datetime(
1414 year, month, day, hours, minutes, seconds, fractionOfSecond);
1415}
1416
1417inline Datetime Datetime::createDatetime(unsigned year,
1418 unsigned month,
1419 unsigned day,
1420 unsigned hours,
1421 unsigned minutes,
1422 unsigned seconds,
1423 Microseconds fractionOfSecond)
1424{
1425 return Datetime(
1426 year, month, day, hours, minutes, seconds, fractionOfSecond);
1427}
1428
1429inline Datetime Datetime::createDatetime(unsigned year,
1430 unsigned month,
1431 unsigned day,
1432 unsigned hours,
1433 unsigned minutes,
1434 unsigned seconds,
1435 Nanoseconds fractionOfSecond)
1436{
1437 return Datetime(
1438 year, month, day, hours, minutes, seconds, fractionOfSecond);
1439}
1440
1441inline Datetime Datetime::createDatetime(unsigned year,
1442 unsigned month,
1443 unsigned day,
1444 unsigned hours,
1445 unsigned minutes,
1446 unsigned seconds,
1447 Picoseconds fractionOfSecond)
1448{
1449 return Datetime(
1450 year, month, day, hours, minutes, seconds, fractionOfSecond);
1451}
1452
1453inline Datetime Datetime::createDatetime(unsigned year,
1454 unsigned month,
1455 unsigned day,
1456 unsigned hours,
1457 unsigned minutes,
1458 unsigned seconds,
1459 Milliseconds fractionOfSecond,
1460 Offset offset)
1461{
1462 Datetime dt(year, month, day, hours, minutes, seconds, fractionOfSecond);
1463 dt.setOffset(offset.d_minutesAheadOfUTC);
1464 return dt;
1465}
1466
1467inline Datetime Datetime::createDatetime(unsigned year,
1468 unsigned month,
1469 unsigned day,
1470 unsigned hours,
1471 unsigned minutes,
1472 unsigned seconds,
1473 Microseconds fractionOfSecond,
1474 Offset offset)
1475{
1476 Datetime dt(year, month, day, hours, minutes, seconds, fractionOfSecond);
1477 dt.setOffset(offset.d_minutesAheadOfUTC);
1478 return dt;
1479}
1480
1481inline Datetime Datetime::createDatetime(unsigned year,
1482 unsigned month,
1483 unsigned day,
1484 unsigned hours,
1485 unsigned minutes,
1486 unsigned seconds,
1487 Nanoseconds fractionOfSecond,
1488 Offset offset)
1489{
1490 Datetime dt(year, month, day, hours, minutes, seconds, fractionOfSecond);
1491 dt.setOffset(offset.d_minutesAheadOfUTC);
1492 return dt;
1493}
1494
1495inline Datetime Datetime::createDatetime(unsigned year,
1496 unsigned month,
1497 unsigned day,
1498 unsigned hours,
1499 unsigned minutes,
1500 unsigned seconds,
1501 Picoseconds fractionOfSecond,
1502 Offset offset)
1503{
1504 Datetime dt(year, month, day, hours, minutes, seconds, fractionOfSecond);
1505 dt.setOffset(offset.d_minutesAheadOfUTC);
1506 return dt;
1507}
1508
1509inline Datetime Datetime::createDate(
1510 unsigned year, unsigned month, unsigned day)
1511{
1512 return Datetime(year, month, day);
1513}
1514
1515inline Datetime Datetime::createTime(
1516 unsigned hours, unsigned minutes, unsigned seconds)
1517{
1518 return Datetime(hours, minutes, seconds, TimeTag());
1519}
1520
1521inline Datetime Datetime::createTime(
1522 unsigned hours, unsigned minutes, unsigned seconds, Offset offset)
1523{
1524 Datetime dt(hours, minutes, seconds, TimeTag());
1525 dt.setOffset(offset.d_minutesAheadOfUTC);
1526 return dt;
1527}
1528
1529inline Datetime Datetime::createTime(unsigned hours,
1530 unsigned minutes,
1531 unsigned seconds,
1532 unsigned milliseconds)
1533{
1535}
1536
1537inline
1538
1539 Datetime
1541 unsigned minutes,
1542 unsigned seconds,
1543 unsigned milliseconds,
1544 Offset offset)
1545{
1546 Datetime dt(hours, minutes, seconds, milliseconds);
1547 dt.setOffset(offset.d_minutesAheadOfUTC);
1548 return dt;
1549}
1550
1551inline Datetime Datetime::createTime(unsigned hours,
1552 unsigned minutes,
1553 unsigned seconds,
1554 Milliseconds fractionOfSecond)
1555{
1556 return Datetime(hours, minutes, seconds, fractionOfSecond);
1557}
1558
1559inline Datetime Datetime::createTime(unsigned hours,
1560 unsigned minutes,
1561 unsigned seconds,
1562 Microseconds fractionOfSecond)
1563{
1564 return Datetime(hours, minutes, seconds, fractionOfSecond);
1565}
1566
1567inline Datetime Datetime::createTime(unsigned hours,
1568 unsigned minutes,
1569 unsigned seconds,
1570 Nanoseconds fractionOfSecond)
1571{
1572 return Datetime(hours, minutes, seconds, fractionOfSecond);
1573}
1574
1575inline Datetime Datetime::createTime(unsigned hours,
1576 unsigned minutes,
1577 unsigned seconds,
1578 Picoseconds fractionOfSecond)
1579{
1580 return Datetime(hours, minutes, seconds, fractionOfSecond);
1581}
1582
1583inline Datetime Datetime::createTime(unsigned hours,
1584 unsigned minutes,
1585 unsigned seconds,
1586 Milliseconds fractionOfSecond,
1587 Offset offset)
1588{
1589 Datetime dt(hours, minutes, seconds, fractionOfSecond);
1590 dt.setOffset(offset.d_minutesAheadOfUTC);
1591 return dt;
1592}
1593
1594inline Datetime Datetime::createTime(unsigned hours,
1595 unsigned minutes,
1596 unsigned seconds,
1597 Microseconds fractionOfSecond,
1598 Offset offset)
1599{
1600 Datetime dt(hours, minutes, seconds, fractionOfSecond);
1601 dt.setOffset(offset.d_minutesAheadOfUTC);
1602 return dt;
1603}
1604
1605inline Datetime Datetime::createTime(unsigned hours,
1606 unsigned minutes,
1607 unsigned seconds,
1608 Nanoseconds fractionOfSecond,
1609 Offset offset)
1610{
1611 Datetime dt(hours, minutes, seconds, fractionOfSecond);
1612 dt.setOffset(offset.d_minutesAheadOfUTC);
1613 return dt;
1614}
1615
1616inline Datetime Datetime::createTime(unsigned hours,
1617 unsigned minutes,
1618 unsigned seconds,
1619 Picoseconds fractionOfSecond,
1620 Offset offset)
1621{
1622 Datetime dt(hours, minutes, seconds, fractionOfSecond);
1623 dt.setOffset(offset.d_minutesAheadOfUTC);
1624 return dt;
1625}
1626
1628{
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;
1633}
1634
1635inline Datetime::Datetime(const Datetime& original)
1636 : d_value(original.d_value)
1637{
1638}
1639
1640inline Datetime::Datetime(const blpapi_Datetime_t& newRawValue)
1641{
1642 d_value.datetime = newRawValue;
1643 d_value.picoseconds = 0;
1644}
1645
1646inline Datetime::Datetime(const blpapi_HighPrecisionDatetime_t& newRawValue)
1647 : d_value(newRawValue)
1648{
1649}
1650
1651inline Datetime::Datetime(unsigned newYear,
1652 unsigned newMonth,
1653 unsigned newDay,
1654 unsigned newHours,
1655 unsigned newMinutes,
1656 unsigned newSeconds)
1657{
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;
1667 d_value.datetime.parts = DatetimeParts::DATE | DatetimeParts::TIME;
1668}
1669
1670inline Datetime::Datetime(unsigned newYear,
1671 unsigned newMonth,
1672 unsigned newDay,
1673 unsigned newHours,
1674 unsigned newMinutes,
1675 unsigned newSeconds,
1676 unsigned newMilliSeconds)
1677{
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
1690}
1691
1692inline Datetime::Datetime(unsigned newYear,
1693 unsigned newMonth,
1694 unsigned newDay,
1695 unsigned newHours,
1696 unsigned newMinutes,
1697 unsigned newSeconds,
1698 Milliseconds fractionOfSecond)
1699{
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
1712}
1713
1714inline Datetime::Datetime(unsigned newYear,
1715 unsigned newMonth,
1716 unsigned newDay,
1717 unsigned newHours,
1718 unsigned newMinutes,
1719 unsigned newSeconds,
1720 Microseconds fractionOfSecond)
1721{
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
1735}
1736
1737inline Datetime::Datetime(unsigned newYear,
1738 unsigned newMonth,
1739 unsigned newDay,
1740 unsigned newHours,
1741 unsigned newMinutes,
1742 unsigned newSeconds,
1743 Nanoseconds fractionOfSecond)
1744{
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
1758}
1759
1760inline Datetime::Datetime(unsigned newYear,
1761 unsigned newMonth,
1762 unsigned newDay,
1763 unsigned newHours,
1764 unsigned newMinutes,
1765 unsigned newSeconds,
1766 Picoseconds fractionOfSecond)
1767{
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
1781}
1782
1783inline Datetime::Datetime(unsigned newYear, unsigned newMonth, unsigned newDay)
1784{
1785 std::memset(&d_value, 0, sizeof(d_value));
1786 setDate(newYear, newMonth, newDay);
1787}
1788
1789inline Datetime::Datetime(unsigned newHours,
1790 unsigned newMinutes,
1791 unsigned newSeconds,
1792 unsigned newMilliSeconds)
1793{
1794 std::memset(&d_value, 0, sizeof(d_value));
1795 setTime(newHours, newMinutes, newSeconds, newMilliSeconds);
1796}
1797
1798inline Datetime::Datetime(unsigned newHours,
1799 unsigned newMinutes,
1800 unsigned newSeconds,
1801 Milliseconds fractionOfSecond)
1802{
1803 std::memset(&d_value, 0, sizeof(d_value));
1804 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1805}
1806
1807inline Datetime::Datetime(unsigned newHours,
1808 unsigned newMinutes,
1809 unsigned newSeconds,
1810 Microseconds fractionOfSecond)
1811{
1812 std::memset(&d_value, 0, sizeof(d_value));
1813 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1814}
1815
1816inline Datetime::Datetime(unsigned newHours,
1817 unsigned newMinutes,
1818 unsigned newSeconds,
1819 Nanoseconds fractionOfSecond)
1820{
1821 std::memset(&d_value, 0, sizeof(d_value));
1822 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1823}
1824
1825inline Datetime::Datetime(unsigned newHours,
1826 unsigned newMinutes,
1827 unsigned newSeconds,
1828 Picoseconds fractionOfSecond)
1829{
1830 std::memset(&d_value, 0, sizeof(d_value));
1831 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1832}
1833
1834inline Datetime& Datetime::operator=(const Datetime& rhs)
1835{
1836 d_value = rhs.d_value;
1837 return *this;
1838}
1839
1841 unsigned newYear, unsigned newMonth, unsigned newDay)
1842{
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);
1846 d_value.datetime.parts |= DatetimeParts::DATE;
1847}
1848
1850 unsigned newHours, unsigned newMinutes, unsigned newSeconds)
1851{
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>(
1858 (d_value.datetime.parts & ~DatetimeParts::FRACSECONDS)
1860}
1861
1862inline void Datetime::setTime(unsigned newHours,
1863 unsigned newMinutes,
1864 unsigned newSeconds,
1865 unsigned newMilliSeconds)
1866{
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;
1873 d_value.datetime.parts |= DatetimeParts::TIMEFRACSECONDS;
1874}
1875
1876inline void Datetime::setTime(unsigned newHours,
1877 unsigned newMinutes,
1878 unsigned newSeconds,
1879 Milliseconds fractionOfSecond)
1880{
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;
1887 d_value.datetime.parts |= DatetimeParts::TIMEFRACSECONDS;
1888}
1889
1890inline void Datetime::setTime(unsigned newHours,
1891 unsigned newMinutes,
1892 unsigned newSeconds,
1893 Microseconds fractionOfSecond)
1894{
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);
1902 d_value.datetime.parts |= DatetimeParts::TIMEFRACSECONDS;
1903}
1904
1905inline void Datetime::setTime(unsigned newHours,
1906 unsigned newMinutes,
1907 unsigned newSeconds,
1908 Nanoseconds fractionOfSecond)
1909{
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);
1917 d_value.datetime.parts |= DatetimeParts::TIMEFRACSECONDS;
1918}
1919
1920inline void Datetime::setTime(unsigned newHours,
1921 unsigned newMinutes,
1922 unsigned newSeconds,
1923 Picoseconds fractionOfSecond)
1924{
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));
1932 d_value.datetime.parts |= DatetimeParts::TIMEFRACSECONDS;
1933}
1934
1935inline void Datetime::setOffset(short value)
1936{
1937 d_value.datetime.offset = value;
1938 d_value.datetime.parts |= DatetimeParts::OFFSET;
1939}
1940
1941inline void Datetime::setYear(unsigned value)
1942{
1943 d_value.datetime.year = static_cast<blpapi_UInt16_t>(value);
1944 d_value.datetime.parts |= DatetimeParts::YEAR;
1945}
1946
1947inline void Datetime::setMonth(unsigned value)
1948{
1949 d_value.datetime.month = static_cast<blpapi_UChar_t>(value);
1950 d_value.datetime.parts |= DatetimeParts::MONTH;
1951}
1952
1953inline void Datetime::setDay(unsigned value)
1954{
1955 d_value.datetime.day = static_cast<blpapi_UChar_t>(value);
1956 d_value.datetime.parts |= DatetimeParts::DAY;
1957}
1958
1959inline void Datetime::setHours(unsigned value)
1960{
1961 d_value.datetime.hours = static_cast<blpapi_UChar_t>(value);
1962 d_value.datetime.parts |= DatetimeParts::HOURS;
1963}
1964
1965inline void Datetime::setMinutes(unsigned value)
1966{
1967 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(value);
1968 d_value.datetime.parts |= DatetimeParts::MINUTES;
1969}
1970
1971inline void Datetime::setSeconds(unsigned value)
1972{
1973 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(value);
1974 d_value.datetime.parts |= DatetimeParts::SECONDS;
1975}
1976
1977inline void Datetime::setMilliseconds(unsigned value)
1978{
1979 d_value.datetime.milliSeconds = static_cast<blpapi_UInt16_t>(value);
1980 d_value.picoseconds = 0;
1981 d_value.datetime.parts |= DatetimeParts::FRACSECONDS;
1982}
1983
1985{
1986 d_value.datetime.milliSeconds = static_cast<blpapi_UInt16_t>(value.d_msec);
1987 d_value.picoseconds = 0;
1988 d_value.datetime.parts |= DatetimeParts::FRACSECONDS;
1989}
1990
1992{
1993 d_value.datetime.milliSeconds
1994 = static_cast<blpapi_UInt16_t>(value.d_usec / 1000);
1995 d_value.picoseconds
1996 = static_cast<blpapi_UInt32_t>(value.d_usec % 1000 * 1000 * 1000);
1997 d_value.datetime.parts |= DatetimeParts::FRACSECONDS;
1998}
1999
2001{
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);
2006 d_value.datetime.parts |= DatetimeParts::FRACSECONDS;
2007}
2008
2010{
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));
2015 d_value.datetime.parts |= DatetimeParts::FRACSECONDS;
2016}
2017
2018inline blpapi_Datetime_t& Datetime::rawValue() { return d_value.datetime; }
2019
2020inline blpapi_HighPrecisionDatetime_t& Datetime::rawHighPrecisionValue()
2021{
2022 return d_value;
2023}
2024
2025inline bool Datetime::hasParts(unsigned newParts) const
2026{
2027 return newParts == (d_value.datetime.parts & newParts);
2028}
2029
2030inline unsigned Datetime::parts() const { return d_value.datetime.parts; }
2031
2032inline unsigned Datetime::year() const { return d_value.datetime.year; }
2033
2034inline unsigned Datetime::month() const { return d_value.datetime.month; }
2035
2036inline unsigned Datetime::day() const { return d_value.datetime.day; }
2037
2038inline unsigned Datetime::hours() const { return d_value.datetime.hours; }
2039
2040inline unsigned Datetime::minutes() const { return d_value.datetime.minutes; }
2041
2042inline unsigned Datetime::seconds() const { return d_value.datetime.seconds; }
2043
2044inline unsigned Datetime::milliSeconds() const
2045{
2046 return d_value.datetime.milliSeconds;
2047}
2048
2049inline unsigned Datetime::milliseconds() const
2050{
2051 return d_value.datetime.milliSeconds;
2052}
2053
2054inline unsigned Datetime::microseconds() const
2055{
2056 return d_value.datetime.milliSeconds * 1000
2057 + d_value.picoseconds / 1000 / 1000;
2058}
2059
2060inline unsigned Datetime::nanoseconds() const
2061{
2062 return d_value.datetime.milliSeconds * 1000 * 1000
2063 + d_value.picoseconds / 1000;
2064}
2065
2066inline unsigned long long Datetime::picoseconds() const
2067{
2068 return d_value.datetime.milliSeconds * 1000LLU * 1000U * 1000U
2069 + d_value.picoseconds;
2070}
2071
2072inline short Datetime::offset() const { return d_value.datetime.offset; }
2073
2074inline const blpapi_Datetime_t& Datetime::rawValue() const
2075{
2076 return d_value.datetime;
2077}
2078
2079inline const blpapi_HighPrecisionDatetime_t&
2081{
2082 return d_value;
2083}
2084
2086{
2087 return d_value;
2088}
2089
2090inline bool Datetime::isValid() const
2091{
2094 && !isValidDate(static_cast<int>(year()),
2095 static_cast<int>(month()),
2096 static_cast<int>(day()))) {
2097 return false;
2098 }
2102 && !isValidTime(static_cast<int>(hours()),
2103 static_cast<int>(minutes()),
2104 static_cast<int>(seconds()),
2105 static_cast<int>(milliSeconds()))) {
2106 return false;
2107 }
2109 && (picoseconds() >= 1000LL * 1000 * 1000 * 1000)) {
2110 return false;
2111 }
2112 return true;
2113}
2114
2115inline std::ostream& Datetime::print(
2116 std::ostream& stream, int level, int spacesPerLevel) const
2117{
2118 BLPAPI_CALL_HIGHPRECISIONDATETIME_PRINT(&d_value,
2120 &stream,
2121 level,
2122 spacesPerLevel);
2123 return stream;
2124}
2125
2126inline bool operator==(const Datetime& lhs, const Datetime& rhs)
2127{
2128 if (lhs.parts() == rhs.parts()) {
2129 return (BLPAPI_CALL_HIGHPRECISIONDATETIME_COMPARE(
2130 &lhs.rawHighPrecisionValue(),
2131 &rhs.rawHighPrecisionValue())
2132 == 0);
2133 }
2134 return false;
2135}
2136
2137inline bool operator!=(const Datetime& lhs, const Datetime& rhs)
2138{
2139 return !(lhs == rhs);
2140}
2141
2142inline bool operator<(const Datetime& lhs, const Datetime& rhs)
2143{
2144 return (BLPAPI_CALL_HIGHPRECISIONDATETIME_COMPARE(
2146 < 0);
2147}
2148
2149inline bool operator<=(const Datetime& lhs, const Datetime& rhs)
2150{
2151 return !(rhs < lhs);
2152}
2153
2154inline bool operator>(const Datetime& lhs, const Datetime& rhs)
2155{
2156 return rhs < lhs;
2157}
2158
2159inline bool operator>=(const Datetime& lhs, const Datetime& rhs)
2160{
2161 return !(lhs < rhs);
2162}
2163
2164inline std::ostream& operator<<(std::ostream& stream, const Datetime& datetime)
2165{
2166 return datetime.print(stream, 0, -1);
2167}
2168
2169// ------------------
2170// class DatetimeUtil
2171// ------------------
2172
2174 const TimePoint& timePoint, Datetime::Offset offset)
2175{
2176 blpapi_HighPrecisionDatetime_t highPrecisionDatetime;
2177 BLPAPI_CALL_HIGHPRECISIONDATETIME_FROMTIMEPOINT(
2178 &highPrecisionDatetime, &timePoint, offset.d_minutesAheadOfUTC);
2179 return Datetime(highPrecisionDatetime);
2180}
2181
2182} // close namespace blpapi
2183} // close namespace BloombergLP
2184
2185#endif // #ifdef __cplusplus
2186
2187#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: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