BLPAPI C++ 3.26.5
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
35
36#ifndef INCLUDED_BLPAPI_DATETIME
37#define INCLUDED_BLPAPI_DATETIME
81
82#ifndef INCLUDED_BLPAPI_CALL
83#include <blpapi_call.h>
84#endif
85
86#ifndef INCLUDED_BLPAPI_DEFS
87#include <blpapi_defs.h>
88#endif
89
90#ifndef INCLUDED_BLPAPI_EXCEPTION
91#include <blpapi_exception.h>
92#endif
93
94#ifndef INCLUDED_BLPAPI_STREAMPROXY
95#include <blpapi_streamproxy.h>
96#endif
97
98#ifndef INCLUDED_BLPAPI_TIMEPOINT
99#include <blpapi_timepoint.h>
100#endif
101
102#ifndef INCLUDED_BLPAPI_TYPES
103#include <blpapi_types.h>
104#endif
105
106#ifdef __cplusplus
107extern "C" {
108#endif
109
111
114
121struct blpapi_Datetime_tag {
123 blpapi_UChar_t parts;
124 blpapi_UChar_t hours;
125 blpapi_UChar_t minutes;
126 blpapi_UChar_t seconds;
127 blpapi_UInt16_t milliSeconds;
128 blpapi_UChar_t month;
129 blpapi_UChar_t day;
130 blpapi_UInt16_t year;
131 blpapi_Int16_t offset; // (signed) minutes ahead of UTC
132};
133
140struct blpapi_HighPrecisionDatetime_tag {
141 blpapi_Datetime_t datetime;
142 blpapi_UInt32_t picoseconds; // picosecond offset into current
143 // *millisecond* i.e. the picosecond offset
144 // into the current full second is
145 // '1000000000LL * milliSeconds + picoseconds'
146};
147
148typedef struct blpapi_HighPrecisionDatetime_tag blpapi_HighPrecisionDatetime_t;
149
150BLPAPI_EXPORT
151int blpapi_Datetime_compare(blpapi_Datetime_t lhs, blpapi_Datetime_t rhs);
152
153BLPAPI_EXPORT
154int blpapi_Datetime_print(const blpapi_Datetime_t *datetime,
155 blpapi_StreamWriter_t streamWriter,
156 void *stream,
157 int level,
158 int spacesPerLevel);
159
160BLPAPI_EXPORT
161int blpapi_HighPrecisionDatetime_compare(
162 const blpapi_HighPrecisionDatetime_t *lhs,
163 const blpapi_HighPrecisionDatetime_t *rhs);
164
165BLPAPI_EXPORT
166int blpapi_HighPrecisionDatetime_print(
167 const blpapi_HighPrecisionDatetime_t *datetime,
168 blpapi_StreamWriter_t streamWriter,
169 void *stream,
170 int level,
171 int spacesPerLevel);
172
173BLPAPI_EXPORT
174int blpapi_HighPrecisionDatetime_fromTimePoint(
175 blpapi_HighPrecisionDatetime_t *datetime,
176 const blpapi_TimePoint_t *timePoint,
177 short offset);
178
181
182#ifdef __cplusplus
183} // extern "C"
184
185#ifndef INCLUDED_CASSERT
186#include <cassert>
187#define INCLUDED_CASSERT
188#endif
189
190#ifndef INCLUDED_CSTRING
191#include <cstring> // for std::memset
192#define INCLUDED_CSTRING
193#endif
194
195#ifndef INCLUDED_IOSFWD
196#include <iosfwd>
197#define INCLUDED_IOSFWD
198#endif
199
206
207namespace BloombergLP {
208namespace blpapi {
209
218
224 enum Value {
225
226 YEAR = BLPAPI_DATETIME_YEAR_PART,
227 MONTH = BLPAPI_DATETIME_MONTH_PART,
228 DAY = BLPAPI_DATETIME_DAY_PART,
229 OFFSET = BLPAPI_DATETIME_OFFSET_PART,
230 HOURS = BLPAPI_DATETIME_HOURS_PART,
231 MINUTES = BLPAPI_DATETIME_MINUTES_PART,
232 SECONDS = BLPAPI_DATETIME_SECONDS_PART,
233 FRACSECONDS = BLPAPI_DATETIME_FRACSECONDS_PART,
235
236 MILLISECONDS = BLPAPI_DATETIME_MILLISECONDS_PART,
238
239 DATE = BLPAPI_DATETIME_DATE_PART,
241
242 TIME = BLPAPI_DATETIME_TIME_PART,
244
245 TIMEFRACSECONDS = BLPAPI_DATETIME_TIMEFRACSECONDS_PART,
247
248 TIMEMILLI = BLPAPI_DATETIME_TIMEMILLI_PART,
250 };
251};
252
273class Datetime {
274
275 blpapi_HighPrecisionDatetime_t d_value;
276
277 static bool isLeapYear(int year);
278
279 struct TimeTag { };
280 Datetime(unsigned hours, unsigned minutes, unsigned seconds, TimeTag);
297
298 public:
299 typedef blpapi_HighPrecisionDatetime_t HighPrecision;
302 explicit Milliseconds(int milliseconds);
307 };
310 explicit Microseconds(int microseconds);
315 };
316 struct Nanoseconds {
318 explicit Nanoseconds(int nanoseconds);
323 };
324 struct Picoseconds {
325 long long d_psec;
326 explicit Picoseconds(long long picoseconds);
331 };
332 struct Offset {
334 explicit Offset(short minutesAheadOfUTC);
339 };
340
341 static bool isValidDate(int year, int month, int day);
349
350 static bool isValidTime(int hours, int minutes, int seconds);
351 static bool isValidTime(
352 int hours, int minutes, int seconds, int milliSeconds);
353 static bool isValidTime(int hours,
354 int minutes,
355 int seconds,
356 Milliseconds fractionOfSecond);
357 static bool isValidTime(int hours,
358 int minutes,
359 int seconds,
360 Microseconds fractionOfSecond);
361 static bool isValidTime(
362 int hours, int minutes, int seconds, Nanoseconds fractionOfSecond);
363 static bool isValidTime(
364 int hours, int minutes, int seconds, Picoseconds fractionOfSecond);
373
374 static Datetime createDatetime(unsigned year,
375 unsigned month,
376 unsigned day,
377 unsigned hours,
378 unsigned minutes,
379 unsigned seconds);
393
394 static Datetime createDatetime(unsigned year,
395 unsigned month,
396 unsigned day,
397 unsigned hours,
398 unsigned minutes,
399 unsigned seconds,
400 Offset offset);
415
416 static Datetime createDatetime(unsigned year,
417 unsigned month,
418 unsigned day,
419 unsigned hours,
420 unsigned minutes,
421 unsigned seconds,
422 Milliseconds fractionOfSecond);
423 static Datetime createDatetime(unsigned year,
424 unsigned month,
425 unsigned day,
426 unsigned hours,
427 unsigned minutes,
428 unsigned seconds,
429 Microseconds fractionOfSecond);
430 static Datetime createDatetime(unsigned year,
431 unsigned month,
432 unsigned day,
433 unsigned hours,
434 unsigned minutes,
435 unsigned seconds,
436 Nanoseconds fractionOfSecond);
437 static Datetime createDatetime(unsigned year,
438 unsigned month,
439 unsigned day,
440 unsigned hours,
441 unsigned minutes,
442 unsigned seconds,
443 Picoseconds fractionOfSecond);
458
459 static Datetime createDatetime(unsigned year,
460 unsigned month,
461 unsigned day,
462 unsigned hours,
463 unsigned minutes,
464 unsigned seconds,
465 Milliseconds fractionOfSecond,
466 Offset offset);
467 static Datetime createDatetime(unsigned year,
468 unsigned month,
469 unsigned day,
470 unsigned hours,
471 unsigned minutes,
472 unsigned seconds,
473 Microseconds fractionOfSecond,
474 Offset offset);
475 static Datetime createDatetime(unsigned year,
476 unsigned month,
477 unsigned day,
478 unsigned hours,
479 unsigned minutes,
480 unsigned seconds,
481 Nanoseconds fractionOfSecond,
482 Offset offset);
483 static Datetime createDatetime(unsigned year,
484 unsigned month,
485 unsigned day,
486 unsigned hours,
487 unsigned minutes,
488 unsigned seconds,
489 Picoseconds fractionOfSecond,
490 Offset offset);
504
505 static Datetime createDate(unsigned year, unsigned month, unsigned day);
515
516 static Datetime createTime(
517 unsigned hours, unsigned minutes, unsigned seconds);
528
529 static Datetime createTime(
530 unsigned hours, unsigned minutes, unsigned seconds, Offset offset);
542
543 static Datetime createTime(unsigned hours,
544 unsigned minutes,
545 unsigned seconds,
546 unsigned milliseconds);
557
558 static Datetime createTime(unsigned hours,
559 unsigned minutes,
560 unsigned seconds,
561 unsigned milliseconds,
562 Offset offset);
574
575 static Datetime createTime(unsigned hours,
576 unsigned minutes,
577 unsigned seconds,
578 Milliseconds fractionOfSecond);
579 static Datetime createTime(unsigned hours,
580 unsigned minutes,
581 unsigned seconds,
582 Microseconds fractionOfSecond);
583 static Datetime createTime(unsigned hours,
584 unsigned minutes,
585 unsigned seconds,
586 Nanoseconds fractionOfSecond);
587 static Datetime createTime(unsigned hours,
588 unsigned minutes,
589 unsigned seconds,
590 Picoseconds fractionOfSecond);
601
602 static Datetime createTime(unsigned hours,
603 unsigned minutes,
604 unsigned seconds,
605 Milliseconds fractionOfSecond,
606 Offset offset);
607 static Datetime createTime(unsigned hours,
608 unsigned minutes,
609 unsigned seconds,
610 Microseconds fractionOfSecond,
611 Offset offset);
612 static Datetime createTime(unsigned hours,
613 unsigned minutes,
614 unsigned seconds,
615 Nanoseconds fractionOfSecond,
616 Offset offset);
617 static Datetime createTime(unsigned hours,
618 unsigned minutes,
619 unsigned seconds,
620 Picoseconds fractionOfSecond,
621 Offset offset);
633
634 Datetime();
638
639 Datetime(const Datetime& original);
643
644 explicit Datetime(const blpapi_Datetime_t& rawValue);
645
646 explicit Datetime(const blpapi_HighPrecisionDatetime_t& rawValue);
647
648 Datetime(unsigned year,
649 unsigned month,
650 unsigned day,
651 unsigned hours,
652 unsigned minutes,
653 unsigned seconds);
669
670 Datetime(unsigned year,
671 unsigned month,
672 unsigned day,
673 unsigned hours,
674 unsigned minutes,
675 unsigned seconds,
676 unsigned milliseconds);
692
693 Datetime(unsigned year,
694 unsigned month,
695 unsigned day,
696 unsigned hours,
697 unsigned minutes,
698 unsigned seconds,
699 Milliseconds fractionOfSecond);
700 Datetime(unsigned year,
701 unsigned month,
702 unsigned day,
703 unsigned hours,
704 unsigned minutes,
705 unsigned seconds,
706 Microseconds fractionOfSecond);
707 Datetime(unsigned year,
708 unsigned month,
709 unsigned day,
710 unsigned hours,
711 unsigned minutes,
712 unsigned seconds,
713 Nanoseconds fractionOfSecond);
714 Datetime(unsigned year,
715 unsigned month,
716 unsigned day,
717 unsigned hours,
718 unsigned minutes,
719 unsigned seconds,
720 Picoseconds fractionOfSecond);
737
738 Datetime(unsigned year, unsigned month, unsigned day);
753
754 Datetime(unsigned hours,
755 unsigned minutes,
756 unsigned seconds,
757 unsigned milliseconds);
770
771 Datetime(unsigned hours,
772 unsigned minutes,
773 unsigned seconds,
774 Milliseconds fractionOfSecond);
775 Datetime(unsigned hours,
776 unsigned minutes,
777 unsigned seconds,
778 Microseconds fractionOfSecond);
779 Datetime(unsigned hours,
780 unsigned minutes,
781 unsigned seconds,
782 Nanoseconds fractionOfSecond);
783 Datetime(unsigned hours,
784 unsigned minutes,
785 unsigned seconds,
786 Picoseconds fractionOfSecond);
799
800 Datetime& operator=(const Datetime& rhs);
804
805 void setDate(unsigned year, unsigned month, unsigned day);
813
814 void setTime(unsigned hours, unsigned minutes, unsigned seconds);
823
824 void setTime(unsigned hours,
825 unsigned minutes,
826 unsigned seconds,
827 unsigned milliseconds);
836
837 void setTime(unsigned hours,
838 unsigned minutes,
839 unsigned seconds,
840 Milliseconds fractionOfSecond);
841 void setTime(unsigned hours,
842 unsigned minutes,
843 unsigned seconds,
844 Microseconds fractionOfSecond);
845 void setTime(unsigned hours,
846 unsigned minutes,
847 unsigned seconds,
848 Nanoseconds fractionOfSecond);
849 void setTime(unsigned hours,
850 unsigned minutes,
851 unsigned seconds,
852 Picoseconds fractionOfSecond);
861
862 void setOffset(short minutesAheadOfUTC);
869
870 void setYear(unsigned value);
879
880 void setMonth(unsigned value);
889
890 void setDay(unsigned value);
899
900 void setHours(unsigned value);
906
907 void setMinutes(unsigned value);
913
914 void setSeconds(unsigned value);
920
921 void setMilliseconds(unsigned milliseconds);
927
934
941
948
955
956 blpapi_Datetime_t& rawValue();
975
976 blpapi_HighPrecisionDatetime_t& rawHighPrecisionValue();
987
988 bool hasParts(unsigned parts) const;
995
996 unsigned parts() const;
1002
1003 unsigned year() const;
1008
1009 unsigned month() const;
1014
1015 unsigned day() const;
1020
1021 unsigned hours() const;
1026
1027 unsigned minutes() const;
1033
1034 unsigned seconds() const;
1040
1041 unsigned milliSeconds() const;
1048
1049 unsigned milliseconds() const;
1055
1056 unsigned microseconds() const;
1062
1063 unsigned nanoseconds() const;
1069
1070 unsigned long long picoseconds() const;
1076
1077 short offset() const;
1083
1084 const blpapi_Datetime_t& rawValue() const;
1089
1090 const blpapi_HighPrecisionDatetime_t& rawHighPrecisionValue() const;
1095
1096 const HighPrecision& highPrecisionValue() const;
1101
1102 bool isValid() const;
1113
1114 std::ostream& print(
1115 std::ostream& stream, int level = 0, int spacesPerLevel = 4) const;
1131};
1132
1140
1141 static Datetime fromTimePoint(const TimePoint& timePoint,
1150};
1151
1154
1155// ============================================================================
1156// INLINE FUNCTION DEFINITIONS
1157// ============================================================================
1158
1159// --------------
1160// class Datetime
1161// --------------
1162
1163// FREE OPERATORS
1164bool operator==(const Datetime& lhs, const Datetime& rhs);
1171
1172bool operator!=(const Datetime& lhs, const Datetime& rhs);
1179
1180bool operator<(const Datetime& lhs, const Datetime& rhs);
1181bool operator<=(const Datetime& lhs, const Datetime& rhs);
1182bool operator>(const Datetime& lhs, const Datetime& rhs);
1183bool operator>=(const Datetime& lhs, const Datetime& rhs);
1193
1194std::ostream& operator<<(std::ostream& stream, const Datetime& datetime);
1206
1207inline bool Datetime::isLeapYear(int y)
1208{
1209 return 0 == y % 4 && (y <= 1752 || 0 != y % 100 || 0 == y % 400);
1210}
1211
1212inline Datetime::Datetime(
1213 unsigned newHours, unsigned newMinutes, unsigned newSeconds, TimeTag)
1214{
1215 std::memset(&d_value, 0, sizeof(d_value));
1216 setTime(newHours, newMinutes, newSeconds);
1217}
1218
1223
1228
1233
1238
1239inline Datetime::Offset::Offset(short minutesAheadOfUTC)
1240 : d_minutesAheadOfUTC(minutesAheadOfUTC)
1241{
1242}
1243
1244inline bool Datetime::isValidDate(int year, int month, int day)
1245{
1246 if ((year <= 0) || (year > 9999) || (month <= 0) || (month > 12)
1247 || (day <= 0) || (day > 31)) {
1248 return false;
1249 }
1250 if (year == 1752) {
1251 if (month == 9 && day > 2 && day < 14) {
1252 return false;
1253 }
1254 }
1255 if (day < 29) {
1256 return true;
1257 }
1258 switch (month) {
1259 case 1:
1260 case 3:
1261 case 5:
1262 case 7:
1263 case 8:
1264 case 10:
1265 case 12:
1266 return true;
1267
1268 case 4:
1269 case 6:
1270 case 9:
1271 case 11: {
1272 if (day > 30) {
1273 return false;
1274 } else {
1275 return true;
1276 }
1277 }
1278 case 2: {
1279 if (isLeapYear(year)) {
1280 if (day > 29) {
1281 return false;
1282 } else {
1283 return true;
1284 }
1285 } else if (day > 28) {
1286 return false;
1287 } else {
1288 return true;
1289 }
1290 }
1291 default: {
1292 return true;
1293 }
1294 }
1295}
1296
1297inline bool Datetime::isValidTime(int hours, int minutes, int seconds)
1298{
1299 return (hours >= 0) && (hours < 24) && (minutes >= 0) && (minutes < 60)
1300 && (seconds >= 0) && (seconds < 60);
1301}
1302
1304 int hours, int minutes, int seconds, int milliSeconds)
1305{
1306 return (hours >= 0) && (hours < 24) && (minutes >= 0) && (minutes < 60)
1307 && (seconds >= 0) && (seconds < 60) && (milliSeconds >= 0)
1308 && (milliSeconds < 1000);
1309}
1310
1312 int hours, int minutes, int seconds, Milliseconds fractionOfSecond)
1313{
1314 return isValidTime(hours, minutes, seconds, fractionOfSecond.d_msec);
1315}
1316
1318 int hours, int minutes, int seconds, Microseconds fractionOfSecond)
1319{
1320 return (hours >= 0) && (hours < 24) && (minutes >= 0) && (minutes < 60)
1321 && (seconds >= 0) && (seconds < 60)
1322 && (fractionOfSecond.d_usec >= 0)
1323 && (fractionOfSecond.d_usec < 1000 * 1000);
1324}
1325
1327 int hours, int minutes, int seconds, Nanoseconds fractionOfSecond)
1328{
1329 return (hours >= 0) && (hours < 24) && (minutes >= 0) && (minutes < 60)
1330 && (seconds >= 0) && (seconds < 60)
1331 && (fractionOfSecond.d_nsec >= 0)
1332 && (fractionOfSecond.d_nsec < 1000 * 1000 * 1000);
1333}
1334
1336 int hours, int minutes, int seconds, Picoseconds fractionOfSecond)
1337{
1338 return (hours >= 0) && (hours < 24) && (minutes >= 0) && (minutes < 60)
1339 && (seconds >= 0) && (seconds < 60)
1340 && (fractionOfSecond.d_psec >= 0)
1341 && (fractionOfSecond.d_psec < 1000LL * 1000 * 1000 * 1000);
1342}
1343
1344inline Datetime Datetime::createDatetime(unsigned year,
1345 unsigned month,
1346 unsigned day,
1347 unsigned hours,
1348 unsigned minutes,
1349 unsigned seconds)
1350{
1351 return Datetime(year, month, day, hours, minutes, seconds);
1352}
1353
1354inline Datetime Datetime::createDatetime(unsigned year,
1355 unsigned month,
1356 unsigned day,
1357 unsigned hours,
1358 unsigned minutes,
1359 unsigned seconds,
1360 Offset offset)
1361{
1362 Datetime dt(year, month, day, hours, minutes, seconds);
1363 dt.setOffset(offset.d_minutesAheadOfUTC);
1364 return dt;
1365}
1366
1367inline Datetime Datetime::createDatetime(unsigned year,
1368 unsigned month,
1369 unsigned day,
1370 unsigned hours,
1371 unsigned minutes,
1372 unsigned seconds,
1373 Milliseconds fractionOfSecond)
1374{
1375 return Datetime(
1376 year, month, day, hours, minutes, seconds, fractionOfSecond);
1377}
1378
1379inline Datetime Datetime::createDatetime(unsigned year,
1380 unsigned month,
1381 unsigned day,
1382 unsigned hours,
1383 unsigned minutes,
1384 unsigned seconds,
1385 Microseconds fractionOfSecond)
1386{
1387 return Datetime(
1388 year, month, day, hours, minutes, seconds, fractionOfSecond);
1389}
1390
1391inline Datetime Datetime::createDatetime(unsigned year,
1392 unsigned month,
1393 unsigned day,
1394 unsigned hours,
1395 unsigned minutes,
1396 unsigned seconds,
1397 Nanoseconds fractionOfSecond)
1398{
1399 return Datetime(
1400 year, month, day, hours, minutes, seconds, fractionOfSecond);
1401}
1402
1403inline Datetime Datetime::createDatetime(unsigned year,
1404 unsigned month,
1405 unsigned day,
1406 unsigned hours,
1407 unsigned minutes,
1408 unsigned seconds,
1409 Picoseconds fractionOfSecond)
1410{
1411 return Datetime(
1412 year, month, day, hours, minutes, seconds, fractionOfSecond);
1413}
1414
1415inline Datetime Datetime::createDatetime(unsigned year,
1416 unsigned month,
1417 unsigned day,
1418 unsigned hours,
1419 unsigned minutes,
1420 unsigned seconds,
1421 Milliseconds fractionOfSecond,
1422 Offset offset)
1423{
1424 Datetime dt(year, month, day, hours, minutes, seconds, fractionOfSecond);
1425 dt.setOffset(offset.d_minutesAheadOfUTC);
1426 return dt;
1427}
1428
1429inline Datetime Datetime::createDatetime(unsigned year,
1430 unsigned month,
1431 unsigned day,
1432 unsigned hours,
1433 unsigned minutes,
1434 unsigned seconds,
1435 Microseconds fractionOfSecond,
1436 Offset offset)
1437{
1438 Datetime dt(year, month, day, hours, minutes, seconds, fractionOfSecond);
1439 dt.setOffset(offset.d_minutesAheadOfUTC);
1440 return dt;
1441}
1442
1443inline Datetime Datetime::createDatetime(unsigned year,
1444 unsigned month,
1445 unsigned day,
1446 unsigned hours,
1447 unsigned minutes,
1448 unsigned seconds,
1449 Nanoseconds fractionOfSecond,
1450 Offset offset)
1451{
1452 Datetime dt(year, month, day, hours, minutes, seconds, fractionOfSecond);
1453 dt.setOffset(offset.d_minutesAheadOfUTC);
1454 return dt;
1455}
1456
1457inline Datetime Datetime::createDatetime(unsigned year,
1458 unsigned month,
1459 unsigned day,
1460 unsigned hours,
1461 unsigned minutes,
1462 unsigned seconds,
1463 Picoseconds fractionOfSecond,
1464 Offset offset)
1465{
1466 Datetime dt(year, month, day, hours, minutes, seconds, fractionOfSecond);
1467 dt.setOffset(offset.d_minutesAheadOfUTC);
1468 return dt;
1469}
1470
1471inline Datetime Datetime::createDate(
1472 unsigned year, unsigned month, unsigned day)
1473{
1474 return Datetime(year, month, day);
1475}
1476
1477inline Datetime Datetime::createTime(
1478 unsigned hours, unsigned minutes, unsigned seconds)
1479{
1480 return Datetime(hours, minutes, seconds, TimeTag());
1481}
1482
1483inline Datetime Datetime::createTime(
1484 unsigned hours, unsigned minutes, unsigned seconds, Offset offset)
1485{
1486 Datetime dt(hours, minutes, seconds, TimeTag());
1487 dt.setOffset(offset.d_minutesAheadOfUTC);
1488 return dt;
1489}
1490
1491inline Datetime Datetime::createTime(unsigned hours,
1492 unsigned minutes,
1493 unsigned seconds,
1494 unsigned milliseconds)
1495{
1497}
1498
1499inline
1500
1501 Datetime
1503 unsigned minutes,
1504 unsigned seconds,
1505 unsigned milliseconds,
1506 Offset offset)
1507{
1508 Datetime dt(hours, minutes, seconds, milliseconds);
1509 dt.setOffset(offset.d_minutesAheadOfUTC);
1510 return dt;
1511}
1512
1513inline Datetime Datetime::createTime(unsigned hours,
1514 unsigned minutes,
1515 unsigned seconds,
1516 Milliseconds fractionOfSecond)
1517{
1518 return Datetime(hours, minutes, seconds, fractionOfSecond);
1519}
1520
1521inline Datetime Datetime::createTime(unsigned hours,
1522 unsigned minutes,
1523 unsigned seconds,
1524 Microseconds fractionOfSecond)
1525{
1526 return Datetime(hours, minutes, seconds, fractionOfSecond);
1527}
1528
1529inline Datetime Datetime::createTime(unsigned hours,
1530 unsigned minutes,
1531 unsigned seconds,
1532 Nanoseconds fractionOfSecond)
1533{
1534 return Datetime(hours, minutes, seconds, fractionOfSecond);
1535}
1536
1537inline Datetime Datetime::createTime(unsigned hours,
1538 unsigned minutes,
1539 unsigned seconds,
1540 Picoseconds fractionOfSecond)
1541{
1542 return Datetime(hours, minutes, seconds, fractionOfSecond);
1543}
1544
1545inline Datetime Datetime::createTime(unsigned hours,
1546 unsigned minutes,
1547 unsigned seconds,
1548 Milliseconds fractionOfSecond,
1549 Offset offset)
1550{
1551 Datetime dt(hours, minutes, seconds, fractionOfSecond);
1552 dt.setOffset(offset.d_minutesAheadOfUTC);
1553 return dt;
1554}
1555
1556inline Datetime Datetime::createTime(unsigned hours,
1557 unsigned minutes,
1558 unsigned seconds,
1559 Microseconds fractionOfSecond,
1560 Offset offset)
1561{
1562 Datetime dt(hours, minutes, seconds, fractionOfSecond);
1563 dt.setOffset(offset.d_minutesAheadOfUTC);
1564 return dt;
1565}
1566
1567inline Datetime Datetime::createTime(unsigned hours,
1568 unsigned minutes,
1569 unsigned seconds,
1570 Nanoseconds fractionOfSecond,
1571 Offset offset)
1572{
1573 Datetime dt(hours, minutes, seconds, fractionOfSecond);
1574 dt.setOffset(offset.d_minutesAheadOfUTC);
1575 return dt;
1576}
1577
1578inline Datetime Datetime::createTime(unsigned hours,
1579 unsigned minutes,
1580 unsigned seconds,
1581 Picoseconds fractionOfSecond,
1582 Offset offset)
1583{
1584 Datetime dt(hours, minutes, seconds, fractionOfSecond);
1585 dt.setOffset(offset.d_minutesAheadOfUTC);
1586 return dt;
1587}
1588
1590{
1591 std::memset(&d_value, 0, sizeof(d_value));
1592 d_value.datetime.year = 1;
1593 d_value.datetime.month = 1;
1594 d_value.datetime.day = 1;
1595}
1596
1597inline Datetime::Datetime(const Datetime& original)
1598 : d_value(original.d_value)
1599{
1600}
1601
1602inline Datetime::Datetime(const blpapi_Datetime_t& newRawValue)
1603{
1604 d_value.datetime = newRawValue;
1605 d_value.picoseconds = 0;
1606}
1607
1608inline Datetime::Datetime(const blpapi_HighPrecisionDatetime_t& newRawValue)
1609 : d_value(newRawValue)
1610{
1611}
1612
1613inline Datetime::Datetime(unsigned newYear,
1614 unsigned newMonth,
1615 unsigned newDay,
1616 unsigned newHours,
1617 unsigned newMinutes,
1618 unsigned newSeconds)
1619{
1620 d_value.datetime.offset = 0;
1621 d_value.datetime.year = static_cast<blpapi_UInt16_t>(newYear);
1622 d_value.datetime.month = static_cast<blpapi_UChar_t>(newMonth);
1623 d_value.datetime.day = static_cast<blpapi_UChar_t>(newDay);
1624 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1625 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1626 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1627 d_value.datetime.milliSeconds = 0;
1628 d_value.picoseconds = 0;
1629 d_value.datetime.parts = DatetimeParts::DATE | DatetimeParts::TIME;
1630}
1631
1632inline Datetime::Datetime(unsigned newYear,
1633 unsigned newMonth,
1634 unsigned newDay,
1635 unsigned newHours,
1636 unsigned newMinutes,
1637 unsigned newSeconds,
1638 unsigned newMilliSeconds)
1639{
1640 d_value.datetime.offset = 0;
1641 d_value.datetime.year = static_cast<blpapi_UInt16_t>(newYear);
1642 d_value.datetime.month = static_cast<blpapi_UChar_t>(newMonth);
1643 d_value.datetime.day = static_cast<blpapi_UChar_t>(newDay);
1644 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1645 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1646 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1647 d_value.datetime.milliSeconds
1648 = static_cast<blpapi_UInt16_t>(newMilliSeconds);
1649 d_value.picoseconds = 0;
1650 d_value.datetime.parts
1652}
1653
1654inline Datetime::Datetime(unsigned newYear,
1655 unsigned newMonth,
1656 unsigned newDay,
1657 unsigned newHours,
1658 unsigned newMinutes,
1659 unsigned newSeconds,
1660 Milliseconds fractionOfSecond)
1661{
1662 d_value.datetime.offset = 0;
1663 d_value.datetime.year = static_cast<blpapi_UInt16_t>(newYear);
1664 d_value.datetime.month = static_cast<blpapi_UChar_t>(newMonth);
1665 d_value.datetime.day = static_cast<blpapi_UChar_t>(newDay);
1666 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1667 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1668 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1669 d_value.datetime.milliSeconds
1670 = static_cast<blpapi_UInt16_t>(fractionOfSecond.d_msec);
1671 d_value.picoseconds = 0;
1672 d_value.datetime.parts
1674}
1675
1676inline Datetime::Datetime(unsigned newYear,
1677 unsigned newMonth,
1678 unsigned newDay,
1679 unsigned newHours,
1680 unsigned newMinutes,
1681 unsigned newSeconds,
1682 Microseconds fractionOfSecond)
1683{
1684 d_value.datetime.offset = 0;
1685 d_value.datetime.year = static_cast<blpapi_UInt16_t>(newYear);
1686 d_value.datetime.month = static_cast<blpapi_UChar_t>(newMonth);
1687 d_value.datetime.day = static_cast<blpapi_UChar_t>(newDay);
1688 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1689 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1690 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1691 d_value.datetime.milliSeconds
1692 = static_cast<blpapi_UInt16_t>(fractionOfSecond.d_usec / 1000);
1693 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
1694 (fractionOfSecond.d_usec % 1000) * 1000 * 1000);
1695 d_value.datetime.parts
1697}
1698
1699inline Datetime::Datetime(unsigned newYear,
1700 unsigned newMonth,
1701 unsigned newDay,
1702 unsigned newHours,
1703 unsigned newMinutes,
1704 unsigned newSeconds,
1705 Nanoseconds fractionOfSecond)
1706{
1707 d_value.datetime.offset = 0;
1708 d_value.datetime.year = static_cast<blpapi_UInt16_t>(newYear);
1709 d_value.datetime.month = static_cast<blpapi_UChar_t>(newMonth);
1710 d_value.datetime.day = static_cast<blpapi_UChar_t>(newDay);
1711 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1712 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1713 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1714 d_value.datetime.milliSeconds = static_cast<blpapi_UInt16_t>(
1715 fractionOfSecond.d_nsec / 1000 / 1000);
1716 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
1717 (fractionOfSecond.d_nsec % (1000 * 1000)) * 1000);
1718 d_value.datetime.parts
1720}
1721
1722inline Datetime::Datetime(unsigned newYear,
1723 unsigned newMonth,
1724 unsigned newDay,
1725 unsigned newHours,
1726 unsigned newMinutes,
1727 unsigned newSeconds,
1728 Picoseconds fractionOfSecond)
1729{
1730 d_value.datetime.offset = 0;
1731 d_value.datetime.year = static_cast<blpapi_UInt16_t>(newYear);
1732 d_value.datetime.month = static_cast<blpapi_UChar_t>(newMonth);
1733 d_value.datetime.day = static_cast<blpapi_UChar_t>(newDay);
1734 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1735 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1736 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1737 d_value.datetime.milliSeconds = static_cast<blpapi_UInt16_t>(
1738 fractionOfSecond.d_psec / 1000 / 1000 / 1000);
1739 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
1740 fractionOfSecond.d_psec % (1000 * 1000 * 1000));
1741 d_value.datetime.parts
1743}
1744
1745inline Datetime::Datetime(unsigned newYear, unsigned newMonth, unsigned newDay)
1746{
1747 std::memset(&d_value, 0, sizeof(d_value));
1748 setDate(newYear, newMonth, newDay);
1749}
1750
1751inline Datetime::Datetime(unsigned newHours,
1752 unsigned newMinutes,
1753 unsigned newSeconds,
1754 unsigned newMilliSeconds)
1755{
1756 std::memset(&d_value, 0, sizeof(d_value));
1757 setTime(newHours, newMinutes, newSeconds, newMilliSeconds);
1758}
1759
1760inline Datetime::Datetime(unsigned newHours,
1761 unsigned newMinutes,
1762 unsigned newSeconds,
1763 Milliseconds fractionOfSecond)
1764{
1765 std::memset(&d_value, 0, sizeof(d_value));
1766 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1767}
1768
1769inline Datetime::Datetime(unsigned newHours,
1770 unsigned newMinutes,
1771 unsigned newSeconds,
1772 Microseconds fractionOfSecond)
1773{
1774 std::memset(&d_value, 0, sizeof(d_value));
1775 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1776}
1777
1778inline Datetime::Datetime(unsigned newHours,
1779 unsigned newMinutes,
1780 unsigned newSeconds,
1781 Nanoseconds fractionOfSecond)
1782{
1783 std::memset(&d_value, 0, sizeof(d_value));
1784 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1785}
1786
1787inline Datetime::Datetime(unsigned newHours,
1788 unsigned newMinutes,
1789 unsigned newSeconds,
1790 Picoseconds fractionOfSecond)
1791{
1792 std::memset(&d_value, 0, sizeof(d_value));
1793 setTime(newHours, newMinutes, newSeconds, fractionOfSecond);
1794}
1795
1796inline Datetime& Datetime::operator=(const Datetime& rhs)
1797{
1798 d_value = rhs.d_value;
1799 return *this;
1800}
1801
1803 unsigned newYear, unsigned newMonth, unsigned newDay)
1804{
1805 d_value.datetime.day = static_cast<blpapi_UChar_t>(newDay);
1806 d_value.datetime.month = static_cast<blpapi_UChar_t>(newMonth);
1807 d_value.datetime.year = static_cast<blpapi_UInt16_t>(newYear);
1808 d_value.datetime.parts |= DatetimeParts::DATE;
1809}
1810
1812 unsigned newHours, unsigned newMinutes, unsigned newSeconds)
1813{
1814 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1815 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1816 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1817 d_value.datetime.milliSeconds = 0;
1818 d_value.picoseconds = 0;
1819 d_value.datetime.parts = static_cast<blpapi_UChar_t>(
1820 (d_value.datetime.parts & ~DatetimeParts::FRACSECONDS)
1822}
1823
1824inline void Datetime::setTime(unsigned newHours,
1825 unsigned newMinutes,
1826 unsigned newSeconds,
1827 unsigned newMilliSeconds)
1828{
1829 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1830 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1831 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1832 d_value.datetime.milliSeconds
1833 = static_cast<blpapi_UInt16_t>(newMilliSeconds);
1834 d_value.picoseconds = 0;
1835 d_value.datetime.parts |= DatetimeParts::TIMEFRACSECONDS;
1836}
1837
1838inline void Datetime::setTime(unsigned newHours,
1839 unsigned newMinutes,
1840 unsigned newSeconds,
1841 Milliseconds fractionOfSecond)
1842{
1843 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1844 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1845 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1846 d_value.datetime.milliSeconds
1847 = static_cast<blpapi_UInt16_t>(fractionOfSecond.d_msec);
1848 d_value.picoseconds = 0;
1849 d_value.datetime.parts |= DatetimeParts::TIMEFRACSECONDS;
1850}
1851
1852inline void Datetime::setTime(unsigned newHours,
1853 unsigned newMinutes,
1854 unsigned newSeconds,
1855 Microseconds fractionOfSecond)
1856{
1857 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1858 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1859 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1860 d_value.datetime.milliSeconds
1861 = static_cast<blpapi_UInt16_t>(fractionOfSecond.d_usec / 1000);
1862 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
1863 fractionOfSecond.d_usec % 1000 * 1000 * 1000);
1864 d_value.datetime.parts |= DatetimeParts::TIMEFRACSECONDS;
1865}
1866
1867inline void Datetime::setTime(unsigned newHours,
1868 unsigned newMinutes,
1869 unsigned newSeconds,
1870 Nanoseconds fractionOfSecond)
1871{
1872 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1873 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1874 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1875 d_value.datetime.milliSeconds = static_cast<blpapi_UInt16_t>(
1876 fractionOfSecond.d_nsec / 1000 / 1000);
1877 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
1878 fractionOfSecond.d_nsec % (1000 * 1000) * 1000);
1879 d_value.datetime.parts |= DatetimeParts::TIMEFRACSECONDS;
1880}
1881
1882inline void Datetime::setTime(unsigned newHours,
1883 unsigned newMinutes,
1884 unsigned newSeconds,
1885 Picoseconds fractionOfSecond)
1886{
1887 d_value.datetime.hours = static_cast<blpapi_UChar_t>(newHours);
1888 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(newMinutes);
1889 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(newSeconds);
1890 d_value.datetime.milliSeconds = static_cast<blpapi_UInt16_t>(
1891 fractionOfSecond.d_psec / 1000 / 1000 / 1000);
1892 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
1893 fractionOfSecond.d_psec % (1000 * 1000 * 1000));
1894 d_value.datetime.parts |= DatetimeParts::TIMEFRACSECONDS;
1895}
1896
1897inline void Datetime::setOffset(short value)
1898{
1899 d_value.datetime.offset = value;
1900 d_value.datetime.parts |= DatetimeParts::OFFSET;
1901}
1902
1903inline void Datetime::setYear(unsigned value)
1904{
1905 d_value.datetime.year = static_cast<blpapi_UInt16_t>(value);
1906 d_value.datetime.parts |= DatetimeParts::YEAR;
1907}
1908
1909inline void Datetime::setMonth(unsigned value)
1910{
1911 d_value.datetime.month = static_cast<blpapi_UChar_t>(value);
1912 d_value.datetime.parts |= DatetimeParts::MONTH;
1913}
1914
1915inline void Datetime::setDay(unsigned value)
1916{
1917 d_value.datetime.day = static_cast<blpapi_UChar_t>(value);
1918 d_value.datetime.parts |= DatetimeParts::DAY;
1919}
1920
1921inline void Datetime::setHours(unsigned value)
1922{
1923 d_value.datetime.hours = static_cast<blpapi_UChar_t>(value);
1924 d_value.datetime.parts |= DatetimeParts::HOURS;
1925}
1926
1927inline void Datetime::setMinutes(unsigned value)
1928{
1929 d_value.datetime.minutes = static_cast<blpapi_UChar_t>(value);
1930 d_value.datetime.parts |= DatetimeParts::MINUTES;
1931}
1932
1933inline void Datetime::setSeconds(unsigned value)
1934{
1935 d_value.datetime.seconds = static_cast<blpapi_UChar_t>(value);
1936 d_value.datetime.parts |= DatetimeParts::SECONDS;
1937}
1938
1939inline void Datetime::setMilliseconds(unsigned value)
1940{
1941 d_value.datetime.milliSeconds = static_cast<blpapi_UInt16_t>(value);
1942 d_value.picoseconds = 0;
1943 d_value.datetime.parts |= DatetimeParts::FRACSECONDS;
1944}
1945
1947{
1948 d_value.datetime.milliSeconds = static_cast<blpapi_UInt16_t>(value.d_msec);
1949 d_value.picoseconds = 0;
1950 d_value.datetime.parts |= DatetimeParts::FRACSECONDS;
1951}
1952
1954{
1955 d_value.datetime.milliSeconds
1956 = static_cast<blpapi_UInt16_t>(value.d_usec / 1000);
1957 d_value.picoseconds
1958 = static_cast<blpapi_UInt32_t>(value.d_usec % 1000 * 1000 * 1000);
1959 d_value.datetime.parts |= DatetimeParts::FRACSECONDS;
1960}
1961
1963{
1964 d_value.datetime.milliSeconds
1965 = static_cast<blpapi_UInt16_t>(value.d_nsec / 1000 / 1000);
1966 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
1967 value.d_nsec % (1000 * 1000) * 1000);
1968 d_value.datetime.parts |= DatetimeParts::FRACSECONDS;
1969}
1970
1972{
1973 d_value.datetime.milliSeconds
1974 = static_cast<blpapi_UInt16_t>(value.d_psec / 1000 / 1000 / 1000);
1975 d_value.picoseconds = static_cast<blpapi_UInt32_t>(
1976 value.d_psec % (1000 * 1000 * 1000));
1977 d_value.datetime.parts |= DatetimeParts::FRACSECONDS;
1978}
1979
1980inline blpapi_Datetime_t& Datetime::rawValue() { return d_value.datetime; }
1981
1982inline blpapi_HighPrecisionDatetime_t& Datetime::rawHighPrecisionValue()
1983{
1984 return d_value;
1985}
1986
1987inline bool Datetime::hasParts(unsigned newParts) const
1988{
1989 return newParts == (d_value.datetime.parts & newParts);
1990}
1991
1992inline unsigned Datetime::parts() const { return d_value.datetime.parts; }
1993
1994inline unsigned Datetime::year() const { return d_value.datetime.year; }
1995
1996inline unsigned Datetime::month() const { return d_value.datetime.month; }
1997
1998inline unsigned Datetime::day() const { return d_value.datetime.day; }
1999
2000inline unsigned Datetime::hours() const { return d_value.datetime.hours; }
2001
2002inline unsigned Datetime::minutes() const { return d_value.datetime.minutes; }
2003
2004inline unsigned Datetime::seconds() const { return d_value.datetime.seconds; }
2005
2006inline unsigned Datetime::milliSeconds() const
2007{
2008 return d_value.datetime.milliSeconds;
2009}
2010
2011inline unsigned Datetime::milliseconds() const
2012{
2013 return d_value.datetime.milliSeconds;
2014}
2015
2016inline unsigned Datetime::microseconds() const
2017{
2018 return d_value.datetime.milliSeconds * 1000
2019 + d_value.picoseconds / 1000 / 1000;
2020}
2021
2022inline unsigned Datetime::nanoseconds() const
2023{
2024 return d_value.datetime.milliSeconds * 1000 * 1000
2025 + d_value.picoseconds / 1000;
2026}
2027
2028inline unsigned long long Datetime::picoseconds() const
2029{
2030 return d_value.datetime.milliSeconds * 1000LLU * 1000U * 1000U
2031 + d_value.picoseconds;
2032}
2033
2034inline short Datetime::offset() const { return d_value.datetime.offset; }
2035
2036inline const blpapi_Datetime_t& Datetime::rawValue() const
2037{
2038 return d_value.datetime;
2039}
2040
2041inline const blpapi_HighPrecisionDatetime_t&
2043{
2044 return d_value;
2045}
2046
2048{
2049 return d_value;
2050}
2051
2052inline bool Datetime::isValid() const
2053{
2056 && !isValidDate(static_cast<int>(year()),
2057 static_cast<int>(month()),
2058 static_cast<int>(day()))) {
2059 return false;
2060 }
2064 && !isValidTime(static_cast<int>(hours()),
2065 static_cast<int>(minutes()),
2066 static_cast<int>(seconds()),
2067 static_cast<int>(milliSeconds()))) {
2068 return false;
2069 }
2071 && (picoseconds() >= 1000LL * 1000 * 1000 * 1000)) {
2072 return false;
2073 }
2074 return true;
2075}
2076
2077inline std::ostream& Datetime::print(
2078 std::ostream& stream, int level, int spacesPerLevel) const
2079{
2082 &stream,
2083 level,
2084 spacesPerLevel);
2085 return stream;
2086}
2087
2088inline bool operator==(const Datetime& lhs, const Datetime& rhs)
2089{
2090 if (lhs.parts() == rhs.parts()) {
2092 &lhs.rawHighPrecisionValue(),
2093 &rhs.rawHighPrecisionValue())
2094 == 0);
2095 }
2096 return false;
2097}
2098
2099inline bool operator!=(const Datetime& lhs, const Datetime& rhs)
2100{
2101 return !(lhs == rhs);
2102}
2103
2104inline bool operator<(const Datetime& lhs, const Datetime& rhs)
2105{
2108 < 0);
2109}
2110
2111inline bool operator<=(const Datetime& lhs, const Datetime& rhs)
2112{
2113 return !(rhs < lhs);
2114}
2115
2116inline bool operator>(const Datetime& lhs, const Datetime& rhs)
2117{
2118 return rhs < lhs;
2119}
2120
2121inline bool operator>=(const Datetime& lhs, const Datetime& rhs)
2122{
2123 return !(lhs < rhs);
2124}
2125
2126inline std::ostream& operator<<(std::ostream& stream, const Datetime& datetime)
2127{
2128 return datetime.print(stream, 0, -1);
2129}
2130
2131// ------------------
2132// class DatetimeUtil
2133// ------------------
2134
2136 const TimePoint& timePoint, Datetime::Offset offset)
2137{
2138 blpapi_HighPrecisionDatetime_t highPrecisionDatetime;
2140 &highPrecisionDatetime, &timePoint, offset.d_minutesAheadOfUTC);
2141 return Datetime(highPrecisionDatetime);
2142}
2143
2144} // close namespace blpapi
2145} // close namespace BloombergLP
2146
2147#endif // #ifdef __cplusplus
2148
2149#endif // #ifndef INCLUDED_BLPAPI_DATETIME
Provide functions for dispatchtbl.
#define BLPAPI_CALL_HIGHPRECISIONDATETIME_FROMTIMEPOINT(a1, a2, a3)
Definition blpapi_call.h:473
#define BLPAPI_CALL_HIGHPRECISIONDATETIME_PRINT(a1, a2, a3, a4, a5)
Definition blpapi_call.h:405
#define BLPAPI_CALL_HIGHPRECISIONDATETIME_COMPARE(a1, a2)
Definition blpapi_call.h:403
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:273
void setOffset(short minutesAheadOfUTC)
Definition blpapi_datetime.h:1897
bool hasParts(unsigned parts) const
Definition blpapi_datetime.h:1987
unsigned microseconds() const
Definition blpapi_datetime.h:2016
static bool isValidTime(int hours, int minutes, int seconds)
Definition blpapi_datetime.h:1297
void setDate(unsigned year, unsigned month, unsigned day)
Definition blpapi_datetime.h:1802
unsigned month() const
Definition blpapi_datetime.h:1996
short offset() const
Definition blpapi_datetime.h:2034
void setHours(unsigned value)
Definition blpapi_datetime.h:1921
blpapi_HighPrecisionDatetime_t & rawHighPrecisionValue()
Definition blpapi_datetime.h:1982
unsigned milliSeconds() const
Definition blpapi_datetime.h:2006
blpapi_HighPrecisionDatetime_t HighPrecision
Definition blpapi_datetime.h:299
unsigned nanoseconds() const
Definition blpapi_datetime.h:2022
void setFractionOfSecond(Milliseconds value)
Definition blpapi_datetime.h:1946
unsigned long long picoseconds() const
Definition blpapi_datetime.h:2028
void setMonth(unsigned value)
Definition blpapi_datetime.h:1909
void setYear(unsigned value)
Definition blpapi_datetime.h:1903
unsigned minutes() const
Definition blpapi_datetime.h:2002
Datetime & operator=(const Datetime &rhs)
Definition blpapi_datetime.h:1796
blpapi_Datetime_t & rawValue()
Definition blpapi_datetime.h:1980
unsigned day() const
Definition blpapi_datetime.h:1998
static Datetime createDate(unsigned year, unsigned month, unsigned day)
Definition blpapi_datetime.h:1471
bool isValid() const
Definition blpapi_datetime.h:2052
std::ostream & print(std::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition blpapi_datetime.h:2077
unsigned milliseconds() const
Definition blpapi_datetime.h:2011
unsigned parts() const
Definition blpapi_datetime.h:1992
void setDay(unsigned value)
Definition blpapi_datetime.h:1915
static Datetime createDatetime(unsigned year, unsigned month, unsigned day, unsigned hours, unsigned minutes, unsigned seconds)
Definition blpapi_datetime.h:1344
Datetime()
Definition blpapi_datetime.h:1589
unsigned year() const
Definition blpapi_datetime.h:1994
static Datetime createTime(unsigned hours, unsigned minutes, unsigned seconds)
Definition blpapi_datetime.h:1477
const HighPrecision & highPrecisionValue() const
Definition blpapi_datetime.h:2047
void setMilliseconds(unsigned milliseconds)
Definition blpapi_datetime.h:1939
void setMinutes(unsigned value)
Definition blpapi_datetime.h:1927
unsigned seconds() const
Definition blpapi_datetime.h:2004
unsigned hours() const
Definition blpapi_datetime.h:2000
void setTime(unsigned hours, unsigned minutes, unsigned seconds)
Definition blpapi_datetime.h:1811
static bool isValidDate(int year, int month, int day)
Definition blpapi_datetime.h:1244
void setSeconds(unsigned value)
Definition blpapi_datetime.h:1933
bool operator==(const CorrelationId &lhs, const CorrelationId &rhs)
Definition blpapi_correlationid.h:637
blpapi_TimePoint_t TimePoint
Definition blpapi_timepoint.h:147
bool operator>(const Datetime &lhs, const Datetime &rhs)
Definition blpapi_datetime.h:2116
bool operator<=(const Datetime &lhs, const Datetime &rhs)
Definition blpapi_datetime.h:2111
bool operator>=(const Datetime &lhs, const Datetime &rhs)
Definition blpapi_datetime.h:2121
std::ostream & operator<<(std::ostream &os, const CorrelationId &correlator)
Definition blpapi_correlationid.h:680
bool operator!=(const CorrelationId &lhs, const CorrelationId &rhs)
Definition blpapi_correlationid.h:660
bool operator<(const CorrelationId &lhs, const CorrelationId &rhs)
Definition blpapi_correlationid.h:665
Definition blpapi_abstractsession.h:211
Definition blpapi_datetime.h:217
Value
Definition blpapi_datetime.h:224
@ DATE
year, month, and day are set
Definition blpapi_datetime.h:239
@ MILLISECONDS
MILLISECONDS is a (legacy) synonym for FRACSECONDS
Definition blpapi_datetime.h:236
@ MINUTES
minutes is set
Definition blpapi_datetime.h:231
@ HOURS
hours is set
Definition blpapi_datetime.h:230
@ SECONDS
seconds is set
Definition blpapi_datetime.h:232
@ DAY
day is set
Definition blpapi_datetime.h:228
@ MONTH
month is set
Definition blpapi_datetime.h:227
@ OFFSET
offset is set
Definition blpapi_datetime.h:229
@ YEAR
year is set
Definition blpapi_datetime.h:226
@ FRACSECONDS
fraction-of-second (both millisecond and picosecond) is set
Definition blpapi_datetime.h:233
@ TIMEFRACSECONDS
hours, minutes, seconds, and fraction-of-second are set
Definition blpapi_datetime.h:245
@ TIME
hours, minutes, and seconds are set
Definition blpapi_datetime.h:242
@ TIMEMILLI
TIMEMILLI is a (legacy) synonym for TIMEFRACSECONDS
Definition blpapi_datetime.h:248
Definition blpapi_datetime.h:1139
static Datetime fromTimePoint(const TimePoint &timePoint, Datetime::Offset offset=Datetime::Offset(0))
Definition blpapi_datetime.h:2135
Definition blpapi_datetime.h:308
Microseconds(int microseconds)
Definition blpapi_datetime.h:1224
int d_usec
Definition blpapi_datetime.h:309
Definition blpapi_datetime.h:300
int d_msec
Definition blpapi_datetime.h:301
Milliseconds(int milliseconds)
Definition blpapi_datetime.h:1219
Definition blpapi_datetime.h:316
int d_nsec
Definition blpapi_datetime.h:317
Nanoseconds(int nanoseconds)
Definition blpapi_datetime.h:1229
Definition blpapi_datetime.h:332
Offset(short minutesAheadOfUTC)
Definition blpapi_datetime.h:1239
short d_minutesAheadOfUTC
Definition blpapi_datetime.h:333
Definition blpapi_datetime.h:324
long long d_psec
Definition blpapi_datetime.h:325
Picoseconds(long long picoseconds)
Definition blpapi_datetime.h:1234
static int writeToStream(const char *data, int length, void *stream)
Definition blpapi_streamproxy.h:109