1#define CHRONO_UTILITIES_TIMESPAN_INTEGER_SCALE_OVERLOADS
3#include "../chrono/datetime.h"
4#include "../chrono/format.h"
5#include "../chrono/period.h"
6#include "../chrono/timespan.h"
7#include "../conversion/conversionexception.h"
8#include "../tests/testutils.h"
10#include <cppunit/TestFixture.h>
11#include <cppunit/extensions/HelperMacros.h>
21using namespace CPPUNIT_NS;
30static_assert(DateTime::eternity().isEternity() && !
DateTime().
isEternity(),
"isEternity()");
31static constexpr auto dateFromUnixEpoch(
32 DateTime::unixEpochStart() + TimeSpan::fromHours(1.0) + TimeSpan::fromMinutes(2.0) + TimeSpan::fromSeconds(3.1256789));
33static_assert(dateFromUnixEpoch.dayOfWeek() == DayOfWeek::Thursday,
"dayOfWeek()");
34static_assert(dateFromUnixEpoch.hour() == 1,
"hour()");
35static_assert(dateFromUnixEpoch.minute() == 2,
"minute()");
36static_assert(dateFromUnixEpoch.second() == 3,
"second()");
37static_assert(dateFromUnixEpoch.millisecond() == 125,
"millisecond()");
38static_assert(dateFromUnixEpoch.microsecond() == 678,
"microsecond()");
39static_assert(dateFromUnixEpoch.nanosecond() == 900,
"nanosecond()");
40static_assert(dateFromUnixEpoch.isSameDay(DateTime::unixEpochStart()),
"isSameDay()");
41static_assert(!dateFromUnixEpoch.isSameDay(DateTime::unixEpochStart() + TimeSpan::fromHours(24.0)),
"!isSameDay()");
47static_assert(TimeSpan::infinity().isInfinity() && !
TimeSpan().
isInfinity(),
"isInfinity()");
49static_assert(TimeSpan::fromMilliseconds(1.0125).nanoseconds() == 500,
"fromMilliseconds()/nanoseconds()");
50static_assert(TimeSpan::fromMilliseconds(1.0125).microseconds() == 12,
"fromMilliseconds()/microseconds()");
51static_assert(TimeSpan::fromMilliseconds(1.0125).milliseconds() == 1,
"fromMilliseconds()/milliseconds()");
52static_assert(TimeSpan::fromSeconds(
TimeSpan::TickType(61)).seconds() == 1,
"fromSeconds()/seconds()");
53static_assert(TimeSpan::fromSeconds(
TimeSpan::TickType(61)).minutes() == 1,
"fromSeconds()/minutes()");
54static_assert(TimeSpan::fromMinutes(
TimeSpan::TickType(61)).minutes() == 1,
"fromMinutes()/minutes()");
55static_assert(TimeSpan::fromHours(
TimeSpan::TickType(25)).hours() == 1,
"fromMinutes()/hours()");
56static_assert(TimeSpan::fromDays(20.5).days() == 20,
"fromDays()/days()");
57static_assert(TimeSpan::fromMinutes(1.5).totalMicroseconds() == 90e6,
"totalMicroseconds()");
58static_assert(TimeSpan::fromMinutes(1.5).totalMilliseconds() == 90e3,
"totalMilliseconds()");
59static_assert(TimeSpan::fromMinutes(1.5).totalSeconds() == 90.0,
"totalSeconds()");
60static_assert(TimeSpan::fromHours(1.5).totalMinutes() == 90.0,
"totalMinutes()");
61static_assert(TimeSpan::fromDays(1.5).totalHours() == 36.0,
"totalHours()");
62static_assert(TimeSpan::fromDays(20.5).totalDays() == 20.5,
"totalDays()");
77 CPPUNIT_TEST_SUITE_END();
102 CPPUNIT_ASSERT_EQUAL(DateTime::daysInMonth(2000, 2), 29);
103 CPPUNIT_ASSERT_EQUAL(DateTime::daysInMonth(2001, 2), 28);
104 CPPUNIT_ASSERT_EQUAL(DateTime::daysInMonth(2100, 2), 28);
105 const auto test1 = DateTime::fromDateAndTime(2012, 2, 29, 15, 34, 20, 33.0);
106 CPPUNIT_ASSERT_EQUAL(2012, test1.year());
107 CPPUNIT_ASSERT_EQUAL(2, test1.month());
108 CPPUNIT_ASSERT_EQUAL(29, test1.day());
109 CPPUNIT_ASSERT_EQUAL(15, test1.hour());
110 CPPUNIT_ASSERT_EQUAL(34, test1.minute());
111 CPPUNIT_ASSERT_EQUAL(20, test1.second());
112 CPPUNIT_ASSERT_EQUAL(33, test1.millisecond());
113 CPPUNIT_ASSERT_EQUAL(DayOfWeek::Wednesday, test1.dayOfWeek());
114 CPPUNIT_ASSERT_EQUAL((31 + 29), test1.dayOfYear());
115 CPPUNIT_ASSERT(test1.isLeapYear());
116 CPPUNIT_ASSERT(test1.isSameDay(test1 + TimeSpan::fromHours(8.0)));
117 CPPUNIT_ASSERT(!test1.isSameDay(test1 + TimeSpan::fromHours(9.0)));
118 CPPUNIT_ASSERT_EQUAL(
"Wed 2012-02-29 15:34:20.033"s, test1.toString(DateTimeOutputFormat::DateTimeAndShortWeekday));
119 const auto test2 = DateTime::fromDateAndTime(1, 1, 1, 15, 34, 20, 33.0);
120 CPPUNIT_ASSERT_EQUAL(1, test2.year());
121 CPPUNIT_ASSERT_EQUAL(1, test2.month());
122 CPPUNIT_ASSERT_EQUAL(1, test2.day());
123 CPPUNIT_ASSERT_EQUAL(15, test2.hour());
124 CPPUNIT_ASSERT_EQUAL(34, test2.minute());
125 CPPUNIT_ASSERT_EQUAL(20, test2.second());
126 CPPUNIT_ASSERT_EQUAL(33, test2.millisecond());
129 const auto timeStamp =
static_cast<time_t
>(1453840331);
130 const auto fromTimeStampGmt = DateTime::fromTimeStampGmt(timeStamp), fromTimeStamp = DateTime::fromTimeStamp(timeStamp);
131 CPPUNIT_ASSERT_EQUAL(
"Tue 2016-01-26 20:32:11"s, fromTimeStampGmt.toString(DateTimeOutputFormat::DateTimeAndShortWeekday));
132 CPPUNIT_ASSERT(fabs((fromTimeStamp - fromTimeStampGmt).totalDays()) <= 1.0);
133 CPPUNIT_ASSERT_EQUAL(
DateTime(), DateTime::fromTimeStamp(0));
134 CPPUNIT_ASSERT_EQUAL(timeStamp, fromTimeStampGmt.toTimeStamp());
137 const auto fromChronoTimePointGmt = DateTime::fromChronoTimePointGmt(chrono::system_clock::from_time_t(timeStamp));
138 CPPUNIT_ASSERT_EQUAL(
"Tue 2016-01-26 20:32:11"s, fromChronoTimePointGmt.toString(DateTimeOutputFormat::DateTimeAndShortWeekday));
143 CPPUNIT_ASSERT_THROW(DateTime::fromDateAndTime(0, 2, 29, 15, 34, 20, 33),
ConversionException);
144 CPPUNIT_ASSERT_THROW(DateTime::fromDateAndTime(2013, 2, 29, 15, 34, 20, 33),
ConversionException);
145 CPPUNIT_ASSERT_THROW(DateTime::fromDateAndTime(2012, 2, 29, 15, 61, 20, 33),
ConversionException);
146 CPPUNIT_ASSERT_THROW(DateTime::fromDateAndTime(2012, 4, 31, 15, 0, 20, 33),
ConversionException);
147 CPPUNIT_ASSERT_THROW(DateTime::fromDateAndTime(2012, 3, 31, 15, 0, 61, 33),
ConversionException);
148 CPPUNIT_ASSERT_THROW(DateTime::fromDateAndTime(2012, 1, 1, 61, 2, 1),
ConversionException);
149 CPPUNIT_ASSERT_THROW(DateTime::fromDateAndTime(2012, 1, 1, 15, 2, 1, 2000.0),
ConversionException);
152 CPPUNIT_ASSERT_EQUAL(test1, DateTime::fromString(
"2012-02-29 15:34:20.033"));
153 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"surplus parts ignored", test1, DateTime::fromString(
"2012-02-29 15:34:20.033:12"));
154 CPPUNIT_ASSERT_EQUAL(
"2012-02-29 15:34:20.033"s, test1.toString(DateTimeOutputFormat::DateAndTime,
false));
155 CPPUNIT_ASSERT_THROW(TimeSpan::fromString(
"2012-02-29 15:34:34:20.033"),
ConversionException);
156 const auto test3 = DateTime::fromIsoString(
"2016-08-29T21:32:31.125+02:00");
157 CPPUNIT_ASSERT_EQUAL(
"2016-08-29T21:32:31.125+02:00"s, test3.first.toIsoString(test3.second));
160 const auto test4 = DateTime::fromIsoString(
"2017-08-23T19:40:15.985077682+02:30");
161 CPPUNIT_ASSERT_EQUAL(2.5, test4.second.totalHours());
162 CPPUNIT_ASSERT_EQUAL(15, test4.first.second());
163 CPPUNIT_ASSERT_EQUAL(985, test4.first.millisecond());
164 CPPUNIT_ASSERT_EQUAL(77, test4.first.microsecond());
165 CPPUNIT_ASSERT_EQUAL(600, test4.first.nanosecond());
166 CPPUNIT_ASSERT_EQUAL(
"2017-08-23T19:40:15.9850776+02:30"s, test4.first.toIsoString(test4.second));
168 const auto test5 = DateTime::fromIsoString(
"2017-08-23T19:40:15.985077682-02:30");
169 CPPUNIT_ASSERT_EQUAL(-2.5, test5.second.totalHours());
170 CPPUNIT_ASSERT_EQUAL(15, test5.first.second());
171 CPPUNIT_ASSERT_EQUAL(985, test5.first.millisecond());
172 CPPUNIT_ASSERT_EQUAL(77, test5.first.microsecond());
173 CPPUNIT_ASSERT_EQUAL(600, test5.first.nanosecond());
174 CPPUNIT_ASSERT_EQUAL(
"2017-08-23T19:40:15.9850776-02:30"s, test5.first.toIsoString(test5.second));
176 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"only year", DateTime::fromDate(2008), DateTime::fromIsoStringGmt(
"2008"));
177 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"only year and month", DateTime::fromDate(2008, 12), DateTime::fromIsoStringGmt(
"2008-12"));
178 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"only date", DateTime::fromDate(2008, 12, 5), DateTime::fromIsoStringGmt(
"2008-12-05"));
179 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"Zulu time",
TimeSpan(), DateTime::fromIsoString(
"2017-08-23T19:40:15.985077682Z").second);
180 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"no minutes", TimeSpan::fromHours(3.0), DateTime::fromIsoString(
"2017-08-23T19:40:15.985077682+03").second);
181 const auto test6 = DateTime::fromIsoString(
"1970-01-01T01:02:03+01:00");
182 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"no seconds fraction (positive timezone offset, 1)", DateTime::fromDateAndTime(1970, 1, 1, 1, 2, 3), test6.first);
183 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"no seconds fraction (positive timezone offset, 2)", TimeSpan::fromHours(1.0), test6.second);
184 const auto test7 = DateTime::fromIsoString(
"2021-05-20T23:02:45-04:00");
185 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"no seconds fraction (negative timezone offset, 1)", DateTime::fromDateAndTime(2021, 5, 20, 23, 2, 45), test7.first);
186 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"no seconds fraction (negative timezone offset, 2)", TimeSpan::fromHours(-4.0), test7.second);
188 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"no separators", test5.first - test5.second, DateTime::fromIsoStringGmt(
"20170823T194015.985077682-0230"));
189 CPPUNIT_ASSERT_EQUAL_MESSAGE(
190 "not even T separator", DateTime::fromDateAndTime(2017, 8, 23, 19, 40, 15), DateTime::fromIsoStringGmt(
"20170823194015"));
191 CPPUNIT_ASSERT_THROW_MESSAGE(
"too many digits after seconds", DateTime::fromIsoString(
"2017082319401516"),
ConversionException);
192 CPPUNIT_ASSERT_THROW_MESSAGE(
"too many digits after timezone offset", DateTime::fromIsoString(
"20170823194015.16+02300"),
ConversionException);
194 CPPUNIT_ASSERT_THROW_MESSAGE(
"digits after Z", DateTime::fromIsoString(
"2017-O8-23T19:40:15.985077682Z02:00"),
ConversionException);
195 CPPUNIT_ASSERT_THROW_MESSAGE(
"invalid letter", DateTime::fromIsoString(
"2017-O8-23T19:40:15.985077682:+02:00"),
ConversionException);
196 CPPUNIT_ASSERT_THROW_MESSAGE(
"invalid T", DateTime::fromIsoString(
"2017-08-23T19:T40:15.985077682+02:00"),
ConversionException);
197 CPPUNIT_ASSERT_THROW_MESSAGE(
"invalid -", DateTime::fromIsoString(
"2017-08-23T19:40-15.985077682+02:00"),
ConversionException);
198 CPPUNIT_ASSERT_THROW_MESSAGE(
"invalid .", DateTime::fromIsoString(
"2017-08.5-23T19:40:15.985077682+02:00"),
ConversionException);
199 CPPUNIT_ASSERT_THROW_MESSAGE(
"invalid :", DateTime::fromIsoString(
"2017:08-23T19:40:15.985077682+02:00"),
ConversionException);
200 CPPUNIT_ASSERT_THROW_MESSAGE(
"invalid :", DateTime::fromIsoString(
"2017-08-23T19:40:15:985077682+02:00"),
ConversionException);
202 CPPUNIT_ASSERT_EQUAL(
"1234-05-06T07:08:09.0105005"s, DateTime::fromDateAndTime(1234, 5, 6, 7, 8, 9, 10.5005).toString(DateTimeOutputFormat::Iso));
203 CPPUNIT_ASSERT_EQUAL(
"1234-05-06T07:08:09.0105005"s,
204 DateTime::fromDateAndTime(1234, 5, 6, 7, 8, 9, 10.5005).toString(DateTimeOutputFormat::IsoOmittingDefaultComponents));
205 CPPUNIT_ASSERT_EQUAL(
"1234-05-06T07:08:09.010500"s,
206 DateTime::fromDateAndTime(1234, 5, 6, 7, 8, 9, 10.500).toString(DateTimeOutputFormat::IsoOmittingDefaultComponents));
207 CPPUNIT_ASSERT_EQUAL(
208 "1234-05-06T07:08:09.010"s, DateTime::fromDateAndTime(1234, 5, 6, 7, 8, 9, 10).toString(DateTimeOutputFormat::IsoOmittingDefaultComponents));
209 CPPUNIT_ASSERT_EQUAL(
210 "1234-05-06T07:08:09"s, DateTime::fromDateAndTime(1234, 5, 6, 7, 8, 9).toString(DateTimeOutputFormat::IsoOmittingDefaultComponents));
211 CPPUNIT_ASSERT_EQUAL(
212 "1234-05-06T07:08"s, DateTime::fromDateAndTime(1234, 5, 6, 7, 8).toString(DateTimeOutputFormat::IsoOmittingDefaultComponents));
213 CPPUNIT_ASSERT_EQUAL(
"1234-05-06T07"s, DateTime::fromDateAndTime(1234, 5, 6, 7).toString(DateTimeOutputFormat::IsoOmittingDefaultComponents));
214 CPPUNIT_ASSERT_EQUAL(
"1234-05-06"s, DateTime::fromDateAndTime(1234, 5, 6).toString(DateTimeOutputFormat::IsoOmittingDefaultComponents));
215 CPPUNIT_ASSERT_EQUAL(
"1234-05"s, DateTime::fromDateAndTime(1234, 5).toString(DateTimeOutputFormat::IsoOmittingDefaultComponents));
216 CPPUNIT_ASSERT_EQUAL(
"1234"s, DateTime::fromDateAndTime(1234).toString(DateTimeOutputFormat::IsoOmittingDefaultComponents));
217 CPPUNIT_ASSERT_EQUAL(
"0001"s,
DateTime().toString(DateTimeOutputFormat::IsoOmittingDefaultComponents));
220#if defined(PLATFORM_UNIX)
221 const auto delta = DateTime::gmtNow() - DateTime::exactGmtNow();
222 CPPUNIT_ASSERT(delta < TimeSpan::fromSeconds(2.0) && delta > TimeSpan::fromSeconds(-2.0));
232 CPPUNIT_ASSERT_EQUAL(
TimeSpan(), TimeSpan::fromString(
string()));
233 CPPUNIT_ASSERT_EQUAL(TimeSpan::fromSeconds(5.0), TimeSpan::fromString(
"5.0"));
234 CPPUNIT_ASSERT_EQUAL(TimeSpan::fromMinutes(5.5), TimeSpan::fromString(
"5:30"));
235 CPPUNIT_ASSERT_EQUAL(TimeSpan::fromHours(7.0) + TimeSpan::fromMinutes(5.5), TimeSpan::fromString(
"7:5:30"));
236 const auto test1 = TimeSpan::fromString(
"2:34:53:2.5");
238 CPPUNIT_ASSERT_EQUAL(3, test1.days());
239 CPPUNIT_ASSERT_EQUAL(10, test1.hours());
240 CPPUNIT_ASSERT_EQUAL(53, test1.minutes());
241 CPPUNIT_ASSERT_EQUAL(2, test1.seconds());
242 CPPUNIT_ASSERT_EQUAL(500, test1.milliseconds());
243 CPPUNIT_ASSERT(test1.totalDays() > 3.0 && test1.totalDays() < 4.0);
244 CPPUNIT_ASSERT(test1.totalHours() > (2 * 24 + 34) && test1.totalHours() < (2 * 24 + 35));
245 CPPUNIT_ASSERT(test1.totalMinutes() > (2 * 24 * 60 + 34 * 60 + 53) && test1.totalHours() < (2 * 24 * 60 + 34 * 60 + 54));
247 CPPUNIT_ASSERT_EQUAL(
"3 d 10 h 53 min 2 s 500 ms"s, test1.toString(TimeSpanOutputFormat::WithMeasures,
false));
248 CPPUNIT_ASSERT_EQUAL(
"07:05:30"s, (TimeSpan::fromHours(7.0) + TimeSpan::fromMinutes(5.5)).toString());
249 CPPUNIT_ASSERT_EQUAL(
"-5 s"s, TimeSpan::fromSeconds(-5.0).toString(TimeSpanOutputFormat::WithMeasures,
false));
250 CPPUNIT_ASSERT_EQUAL(
"0 s"s,
TimeSpan().toString(TimeSpanOutputFormat::WithMeasures,
false));
251 CPPUNIT_ASSERT_EQUAL(
"5e+02 µs"s, TimeSpan::fromMilliseconds(0.5).toString(TimeSpanOutputFormat::WithMeasures,
false));
253 const auto test2 = TimeSpan::fromString(
"15.985077682");
254 CPPUNIT_ASSERT_EQUAL(15.9850776, test2.totalSeconds());
255 CPPUNIT_ASSERT_EQUAL(15, test2.seconds());
256 CPPUNIT_ASSERT_EQUAL(985, test2.milliseconds());
257 CPPUNIT_ASSERT_EQUAL(77, test2.microseconds());
258 CPPUNIT_ASSERT_EQUAL(600, test2.nanoseconds());
259 CPPUNIT_ASSERT_EQUAL(
"00:00:15.9850776"s, test2.toString());
260 CPPUNIT_ASSERT_EQUAL(
"15 s 985 ms 77 µs 600 ns"s, test2.toString(TimeSpanOutputFormat::WithMeasures));
261 CPPUNIT_ASSERT_EQUAL(
"15.9850776"s, test2.toString(TimeSpanOutputFormat::TotalSeconds));
272 auto dateTime = DateTime::fromDateAndTime(1999, 1, 5, 4, 16);
273 CPPUNIT_ASSERT_EQUAL(7, (dateTime + TimeSpan::fromDays(2.0)).day());
274 CPPUNIT_ASSERT_EQUAL(6, (dateTime + TimeSpan::fromHours(24.0)).day());
275 CPPUNIT_ASSERT_EQUAL(3, (dateTime + TimeSpan::fromHours(24.0) + TimeSpan::fromHours(-1.0)).hour());
276 CPPUNIT_ASSERT_EQUAL(17, (dateTime + TimeSpan::fromHours(24.0) - TimeSpan::fromMinutes(-1.0)).minute());
277 dateTime += TimeSpan::fromDays(365.0);
278 CPPUNIT_ASSERT_EQUAL(2000, dateTime.year());
279 CPPUNIT_ASSERT_EQUAL(5, dateTime.day());
280 CPPUNIT_ASSERT_EQUAL(TimeSpan::fromDays(1.0), TimeSpan::fromHours(12.0) * 2.0);
281 CPPUNIT_ASSERT_EQUAL(TimeSpan::fromHours(12.0), TimeSpan::fromDays(1.0) / 2.0);
282 CPPUNIT_ASSERT_EQUAL(TimeSpan::fromDays(1.0), TimeSpan::fromHours(12.0) *
TimeSpan::TickType(2));
283 CPPUNIT_ASSERT_EQUAL(TimeSpan::fromHours(12.0), TimeSpan::fromDays(1.0) /
TimeSpan::TickType(2));
284 CPPUNIT_ASSERT_EQUAL(2.0, TimeSpan::fromDays(1.0) / TimeSpan::fromHours(12.0));
292 const auto begin(DateTime::fromDateAndTime(1994, 7, 18, 15, 30, 21)), end(DateTime::fromDateAndTime(2017, 12, 2, 15, 30, 21));
293 const Period period(begin, end);
294 CPPUNIT_ASSERT_EQUAL(23, period.
years());
295 CPPUNIT_ASSERT_EQUAL(4, period.
months());
296 CPPUNIT_ASSERT_EQUAL(14, period.
days());
297 CPPUNIT_ASSERT_EQUAL(end.toString(), (begin + period).toString());
299 const auto end2(DateTime::fromDateAndTime(2018, 1, 2, 15, 30, 21));
300 const Period period2(begin, end2);
301 CPPUNIT_ASSERT_EQUAL(23, period2.
years());
302 CPPUNIT_ASSERT_EQUAL(5, period2.
months());
303 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"one more day, because December has 31 days", 15, period2.
days());
304 CPPUNIT_ASSERT_EQUAL(end2.toString(), (begin + period2).toString());
312 set<DateTime> dateTimes;
313 dateTimes.emplace(DateTime::fromDate(2500, 2, 1));
314 dateTimes.emplace(DateTime::fromDate(2500, 2, 2));
315 dateTimes.emplace(DateTime::fromDate(2500, 2, 1));
316 CPPUNIT_ASSERT_EQUAL(2_st, dateTimes.size());
318 set<TimeSpan> timeSpans;
319 timeSpans.emplace(TimeSpan::fromDays(5.0));
320 timeSpans.emplace(TimeSpan::fromDays(10.0));
321 timeSpans.emplace(TimeSpan::fromDays(5.0));
322 CPPUNIT_ASSERT_EQUAL(2_st, timeSpans.size());
CPPUNIT_TEST_SUITE_REGISTRATION(ChronoTests)
The ChronoTests class tests classes and functions provided by the files inside the chrono directory.
void testTimeSpan()
Tests most important TimeSpan features.
void testHashing()
Tests hashing DateTime / TimeSpan by using in a set.
void testOperators()
Tests operators of DateTime / TimeSpan.
void testDateTime()
Tests most important DateTime features.
void testPeriod()
Tests Period.
The ConversionException class is thrown by the various conversion functions of this library when a co...
Represents an instant in time, typically expressed as a date and time of day.
constexpr bool isNull() const
Returns true if the date represented by the current DateTime class is null.
constexpr TickType totalTicks() const
Returns the number of ticks which represent the value of the current instance.
constexpr bool isEternity() const
Returns whether the instance has the maximal number of ticks.
Represents a period of time.
constexpr int days() const
Returns the days component of the period represented by the current instance.
constexpr int years() const
Returns the years component of the period represented by the current instance.
constexpr int months() const
Returns the months component of the period represented by the current instance.
Represents a time interval.
constexpr bool isNull() const
Returns true if the time interval represented by the current TimeSpan class is null.
constexpr bool isNegativeInfinity() const
Returns whether the time interval represented by the current instance is the smallest representable T...
constexpr TickType totalTicks() const
Returns the number of ticks that represent the value of the current TimeSpan class.
constexpr bool isInfinity() const
Returns whether the time interval represented by the current instance is the longest representable Ti...
constexpr bool isNegative() const
Returns true if the time interval represented by the current TimeSpan class is negative.
Contains literals to ease asserting with CPPUNIT_ASSERT_EQUAL.
Contains all utilities provides by the c++utilities library.