wibble  1.1
Functions
wibble::grcal::date Namespace Reference

Functions that work with int[6] datetime values. More...

Functions

int daysinmonth (int year, int month)
 Return the number of days in a month. More...
 
int daysinyear (int year)
 Return the number of days in a year. More...
 
void easter (int year, int *month, int *day)
 Compute the day of Easter. More...
 
void lowerbound (const int *src, int *dst)
 Make a copy of the datetime, filling in missing values with the lowest possible value they can have. More...
 
void lowerbound (int *val)
 Fill in the missing values of a datetime with the lowest possible value they can have. More...
 
void normalise (int *res)
 Normalise a datetime, in place. More...
 
void upperbound (const int *src, int *dst)
 Make a copy of the datetime, filling in missing values with the highest possible value they can have. More...
 
void upperbound (int *val)
 Fill in the missing values of a datetime with the highest possible value they can have. More...
 
long long int secondsfrom (int year, const int *val)
 Convert the given time in seconds elapsed since the beginning of the given year. More...
 
long long int duration (const int *begin, const int *end)
 Give the duration in seconds of the interval between begin and end. More...
 
void mergetime (const int *date, const int *time, int *dst)
 Make a copy of date, with the time part taken from time. More...
 
void mergetime (int *date, const int *time)
 Replace the time part of date with the values from time. More...
 
void totm (const int *src, struct tm *dst)
 Copy the values from an int[6] datetime into a struct tm. More...
 
void fromtm (const struct tm &src, int *dst, int count=6)
 Copy the values from a struct tm to the first count values of the int[6] dst. More...
 
std::string tostring (const int *val)
 Convert a datetime to a string. More...
 
void today (int *dst)
 Fill in an int[6] with the UTC values for today (leaving the time of day elements to -1) More...
 
void now (int *dst)
 Fill in an int[6] with the UTC values for now. More...
 

Detailed Description

Functions that work with int[6] datetime values.

Function Documentation

int wibble::grcal::date::daysinmonth ( int  year,
int  month 
)

Return the number of days in a month.

Referenced by normalise(), and secondsfrom().

int wibble::grcal::date::daysinyear ( int  year)

Return the number of days in a year.

Referenced by secondsfrom().

long long int wibble::grcal::date::duration ( const int *  begin,
const int *  end 
)

Give the duration in seconds of the interval between begin and end.

The result can be negative if end is an earlier date than begin.

References lowerbound(), secondsfrom(), and upperbound().

void wibble::grcal::date::easter ( int  year,
int *  month,
int *  day 
)

Compute the day of Easter.

The algorithm used is the Meeus/Jones/Butcher Gregorian algorithm described at http://en.wikipedia.org/wiki/Computus

void wibble::grcal::date::fromtm ( const struct tm &  src,
int *  dst,
int  count 
)

Copy the values from a struct tm to the first count values of the int[6] dst.

void wibble::grcal::date::lowerbound ( const int *  src,
int *  dst 
)

Make a copy of the datetime, filling in missing values with the lowest possible value they can have.

Referenced by duration().

void wibble::grcal::date::lowerbound ( int *  val)

Fill in the missing values of a datetime with the lowest possible value they can have.

void wibble::grcal::date::mergetime ( const int *  date,
const int *  time,
int *  dst 
)

Make a copy of date, with the time part taken from time.

Note
time is an int[3] time value;
void wibble::grcal::date::mergetime ( int *  date,
const int *  time 
)

Replace the time part of date with the values from time.

Note
time is an int[3] time value;
void wibble::grcal::date::normalise ( int *  res)

Normalise a datetime, in place.

This function takes in input a datetime with no missing values, but some values can be arbitrarily out of range. The datetime will be normalised so that all the elements will be within range, and it will still represent the same instant.

For example (remember that months and days start from 1, so a day of 0 means "last day of previous month"):

normalise({2007, 0, 1, 0, 0, 0}) gives {2006, 12, 1, 0, 0, 0} normalise({2007, -11, 1, 0, 0, 0}) gives {2006, 1, 1, 0, 0, 0} normalise({2007, 1, -364, 0, 0, 0}) gives {2006, 1, 1, 0, 0, 0} normalise({2007, 1, 366, 0, 0, 0}) gives {2008, 1, 1, 0, 0, 0} normalise({2009, 1, -364, 0, 0, 0}) gives {2008, 1, 2, 0, 0, 0}, because 2008 is a leap year normalise({2008, 1, 1, 0, 0, -3600}) gives {2007, 12, 31, 23, 0, 0}

References daysinmonth().

Referenced by upperbound().

void wibble::grcal::date::now ( int *  dst)

Fill in an int[6] with the UTC values for now.

Referenced by wibble::log::Timestamper::send(), and wibble::net::http::Request::send_date_header().

long long int wibble::grcal::date::secondsfrom ( int  year,
const int *  val 
)

Convert the given time in seconds elapsed since the beginning of the given year.

Compute the number of seconds that elapsed from the beginning of the given year until the given datetime.

It is assumed that year <= t[0]

It is assumed that year <= val[0]: giving a year greather than val[0] will give unpredictable results.

References daysinmonth(), and daysinyear().

Referenced by duration().

void wibble::grcal::date::today ( int *  dst)

Fill in an int[6] with the UTC values for today (leaving the time of day elements to -1)

std::string wibble::grcal::date::tostring ( const int *  val)

Convert a datetime to a string.

void wibble::grcal::date::totm ( const int *  src,
struct tm *  dst 
)

Copy the values from an int[6] datetime into a struct tm.

void wibble::grcal::date::upperbound ( const int *  src,
int *  dst 
)

Make a copy of the datetime, filling in missing values with the highest possible value they can have.

References normalise().

Referenced by duration().

void wibble::grcal::date::upperbound ( int *  val)

Fill in the missing values of a datetime with the highest possible value they can have.

References normalise().