Base module

DateTime

This class represents an instant in time, expressed in years, months, days, hours, minutes, seconds and milliseconds based on the Gregorian calendar.

DateTime

#include <icy/datetime.h>

This class represents an instant in time, expressed in years, months, days, hours, minutes, seconds and milliseconds based on the Gregorian calendar. The class is mainly useful for conversions between UTC, Julian day and Gregorian calendar dates.

The date and time stored in a DateTime is always in UTC (Coordinated Universal Time) and thus independent of the timezone in effect on the system.

Conversion calculations are based on algorithms collected and described by Peter Baum at http://vsg.cape.com/~pbaum/date/date0.htm

Internally, this class stores a date/time in two forms (UTC and broken down) for performance reasons. Only use this class for conversions between date/time representations. Use the Timestamp class for everything else.

Notes:

  • Zero is a valid year (in accordance with ISO 8601 and astronomical year numbering)

  • Year zero (0) is a leap year

  • Negative years (years preceding 1 BC) are not supported

For more information, please see:

Public Methods

ReturnNameDescription
DateTimeCreates a DateTime for the current date and time.
DateTimeCreates a DateTime for the date and time given in a Timestamp.
DateTimeCreates a DateTime for the given Gregorian date and time.
DateTimeCreates a DateTime for the given Julian day.
DateTimeCreates a DateTime from an UtcTimeVal and a TimeDiff.
DateTimeCopy constructor. Creates the DateTime from another one.
~DateTimeDestroys the DateTime.
DateTime &operator=Assigns another DateTime.
DateTime &operator=Assigns a Timestamp.
DateTime &operator=Assigns a Julian day.
DateTime &assignAssigns a Gregorian date and time.
voidswapSwaps the DateTime with another one.
intyear const inlineReturns the year.
intmonth const inlineReturns the month (1 to 12).
intweek constReturns the week number within the year. FirstDayOfWeek should be either SUNDAY (0) or MONDAY (1). The returned week number will be from 0 to 53. Week number 1 is the week containing January 4. This is in accordance to ISO 8601.
intday const inlineReturns the day witin the month (1 to 31).
intdayOfWeek constReturns the weekday (0 to 6, where 0 = Sunday, 1 = Monday, ..., 6 = Saturday).
intdayOfYear constReturns the number of the day in the year. January 1 is 1, February 1 is 32, etc.
inthour const inlineReturns the hour (0 to 23).
inthourAMPM const inlineReturns the hour (0 to 12).
boolisAM const inlineReturns true if hour < 12;.
boolisPM const inlineReturns true if hour >= 12.
intminute const inlineReturns the minute (0 to 59).
intsecond const inlineReturns the second (0 to 59).
intmillisecond const inlineReturns the millisecond (0 to 999)
intmicrosecond const inlineReturns the microsecond (0 to 999)
doublejulianDay constReturns the julian day for the date and time.
Timestamptimestamp const inlineReturns the date and time expressed as a Timestamp.
Timestamp::UtcTimeValutcTime const inlineReturns the date and time expressed in UTC-based time. UTC base time is midnight, October 15, 1582. Resolution is 100 nanoseconds.
booloperator== const inline
booloperator!= const inline
booloperator< const inline
booloperator<= const inline
booloperator> const inline
booloperator>= const inline
DateTimeoperator+ const
DateTimeoperator- const
Timespanoperator- const
DateTime &operator+=
DateTime &operator-=
voidmakeUTCConverts a local time into UTC, by applying the given time zone differential.
voidmakeLocalConverts a UTC time into a local time, by applying the given time zone differential.

DateTime

DateTime()

Creates a DateTime for the current date and time.


DateTime

DateTime(const Timestamp & timestamp)

Creates a DateTime for the date and time given in a Timestamp.


DateTime

DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int microsecond)

Creates a DateTime for the given Gregorian date and time.

  • year is from 0 to 9999.

  • month is from 1 to 12.

  • day is from 1 to 31.

  • hour is from 0 to 23.

  • minute is from 0 to 59.

  • second is from 0 to 59.

  • millisecond is from 0 to 999.

  • microsecond is from 0 to 999.


DateTime

DateTime(double julianDay)

Creates a DateTime for the given Julian day.


DateTime

DateTime(Timestamp::UtcTimeVal utcTime, Timestamp::TimeDiff diff)

Creates a DateTime from an UtcTimeVal and a TimeDiff.

Mainly used internally by DateTime and friends.


DateTime

DateTime(const DateTime & dateTime)

Copy constructor. Creates the DateTime from another one.


~DateTime

~DateTime()

Destroys the DateTime.


operator=

DateTime & operator=(const DateTime & dateTime)

Assigns another DateTime.


operator=

DateTime & operator=(const Timestamp & timestamp)

Assigns a Timestamp.


operator=

DateTime & operator=(double julianDay)

Assigns a Julian day.


assign

DateTime & assign(int year, int month, int day, int hour, int minute, int second, int millisecond, int microseconds)

Assigns a Gregorian date and time.

  • year is from 0 to 9999.

  • month is from 1 to 12.

  • day is from 1 to 31.

  • hour is from 0 to 23.

  • minute is from 0 to 59.

  • second is from 0 to 59.

  • millisecond is from 0 to 999.

  • microsecond is from 0 to 999.


swap

void swap(DateTime & dateTime)

Swaps the DateTime with another one.


year

const inline

inline int year() const

Returns the year.


month

const inline

inline int month() const

Returns the month (1 to 12).


week

const

int week(int firstDayOfWeek) const

Returns the week number within the year. FirstDayOfWeek should be either SUNDAY (0) or MONDAY (1). The returned week number will be from 0 to 53. Week number 1 is the week containing January 4. This is in accordance to ISO 8601.

The following example assumes that firstDayOfWeek is MONDAY. For 2005, which started on a Saturday, week 1 will be the week starting on Monday, January 3. January 1 and 2 will fall within week 0 (or the last week of the previous year).

For 2007, which starts on a Monday, week 1 will be the week startung on Monday, January 1. There will be no week 0 in 2007.


day

const inline

inline int day() const

Returns the day witin the month (1 to 31).


dayOfWeek

const

int dayOfWeek() const

Returns the weekday (0 to 6, where 0 = Sunday, 1 = Monday, ..., 6 = Saturday).


dayOfYear

const

int dayOfYear() const

Returns the number of the day in the year. January 1 is 1, February 1 is 32, etc.


hour

const inline

inline int hour() const

Returns the hour (0 to 23).


hourAMPM

const inline

inline int hourAMPM() const

Returns the hour (0 to 12).


isAM

const inline

inline bool isAM() const

Returns true if hour < 12;.


isPM

const inline

inline bool isPM() const

Returns true if hour >= 12.


minute

const inline

inline int minute() const

Returns the minute (0 to 59).


second

const inline

inline int second() const

Returns the second (0 to 59).


millisecond

const inline

inline int millisecond() const

Returns the millisecond (0 to 999)


microsecond

const inline

inline int microsecond() const

Returns the microsecond (0 to 999)


julianDay

const

double julianDay() const

Returns the julian day for the date and time.


timestamp

const inline

inline Timestamp timestamp() const

Returns the date and time expressed as a Timestamp.


utcTime

const inline

inline Timestamp::UtcTimeVal utcTime() const

Returns the date and time expressed in UTC-based time. UTC base time is midnight, October 15, 1582. Resolution is 100 nanoseconds.


operator==

const inline

inline bool operator==(const DateTime & dateTime) const

operator!=

const inline

inline bool operator!=(const DateTime & dateTime) const

operator<

const inline

inline bool operator<(const DateTime & dateTime) const

operator<=

const inline

inline bool operator<=(const DateTime & dateTime) const

operator>

const inline

inline bool operator>(const DateTime & dateTime) const

operator>=

const inline

inline bool operator>=(const DateTime & dateTime) const

operator+

const

DateTime operator+(const Timespan & span) const

operator-

const

DateTime operator-(const Timespan & span) const

operator-

const

Timespan operator-(const DateTime & dateTime) const

operator+=

DateTime & operator+=(const Timespan & span)

operator-=

DateTime & operator-=(const Timespan & span)

makeUTC

void makeUTC(int tzd)

Converts a local time into UTC, by applying the given time zone differential.


makeLocal

void makeLocal(int tzd)

Converts a UTC time into a local time, by applying the given time zone differential.

Public Static Methods

ReturnNameDescription
boolisLeapYear static inlineReturns true if the given year is a leap year; false otherwise.
intdaysOfMonth staticReturns the number of days in the given month and year. Month is from 1 to 12.
boolisValid staticChecks if the given date and time is valid (all arguments are within a proper range).

isLeapYear

static inline

static inline bool isLeapYear(int year)

Returns true if the given year is a leap year; false otherwise.


daysOfMonth

static

static int daysOfMonth(int year, int month)

Returns the number of days in the given month and year. Month is from 1 to 12.


isValid

static

static bool isValid(int year, int month, int day, int hour, int minute, int second, int millisecond, int microsecond)

Checks if the given date and time is valid (all arguments are within a proper range).

Returns true if all arguments are valid, false otherwise.

Protected Methods

ReturnNameDescription
voidcomputeGregorianComputes the Gregorian date for the given Julian day. See http://vsg.cape.com/~pbaum/date/injdimp.htm, section 3.3.1 for the algorithm.
voidcomputeDaytimeExtracts the daytime (hours, minutes, seconds, etc.) from the stored utcTime.

computeGregorian

void computeGregorian(double julianDay)

Computes the Gregorian date for the given Julian day. See http://vsg.cape.com/~pbaum/date/injdimp.htm, section 3.3.1 for the algorithm.


computeDaytime

void computeDaytime()

Extracts the daytime (hours, minutes, seconds, etc.) from the stored utcTime.

Public Types

NameDescription
MonthsSymbolic names for month numbers (1 to 12).
DaysOfWeekSymbolic names for week day numbers (0 to 6).

Months

enum Months

Symbolic names for month numbers (1 to 12).

ValueDescription
JANUARY
FEBRUARY
MARCH
APRIL
MAY
JUNE
JULY
AUGUST
SEPTEMBER
OCTOBER
NOVEMBER
DECEMBER

DaysOfWeek

enum DaysOfWeek

Symbolic names for week day numbers (0 to 6).

ValueDescription
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY

Private Attributes

ReturnNameDescription
Timestamp::UtcTimeVal_utcTime
short_year
short_month
short_day
short_hour
short_minute
short_second
short_millisecond
short_microsecond

_utcTime

Timestamp::UtcTimeVal _utcTime

_year

short _year

_month

short _month

_day

short _day

_hour

short _hour

_minute

short _minute

_second

short _second

_millisecond

short _millisecond

_microsecond

short _microsecond

Private Methods

ReturnNameDescription
voidcheckLimitUtility functions used to correct the overflow in computeGregorian.
voidnormalize

checkLimit

void checkLimit(short & lower, short & higher, short limit)

Utility functions used to correct the overflow in computeGregorian.


normalize

void normalize()