The datetime class represents a date/time combination and provides methods for getting and setting dates and times, converting date/time formats and accessing various date/time values.
Dealing with dates and times is classically one of the most difficult things to do on a computer. The "standard" functions and structures associated with dates and times are complex, vary widely from platform to platform and in many cases are not thread safe. The datetime class attempts to rectify this situation.
The datetime class provides basic methods for getting the system date and time, and returning it in various formats.
#include <rudiments/datetime.h>
#include <rudiments/stdio.h>
int main(int argc, const char **argv) {
// initialize an instance of datetime to the current system date/time
datetime dt;
dt.getSystemDateAndTime();
// the components of the date/time are avaialble in various formats...
// as a string
stdoutput.printf("date/time: %s\n\n",dt.getString());
// including microseconds
stdoutput.printf("date/time: %s\n\n",dt.getString(true));
// as the number of seconds since 1970
stdoutput.printf("seconds since 1970: %d\n\n",dt.getEpoch());
// broken down
stdoutput.write("date/time: ");
stdoutput.printf("%02d/%02d/%04d %02d:%02d:%02d.%06d %s (%d)\n\n",
dt.getMonth(),dt.getDayOfMonth(),dt.getYear(),
dt.getHour(),dt.getMinutes(),dt.getSeconds(),
dt.getMicroseconds(),
dt.getTimeZoneString(),dt.getTimeZoneOffset());
// additional date information
stdoutput.write("date: ");
stdoutput.printf("%s (%s) %d, %04d "
"(day %d of year) (day %d of week)\n\n",
dt.getMonthName(),dt.getMonthAbbreviation(),
dt.getDayOfMonth(),dt.getYear(),dt.getDayOfYear(),
dt.getDayOfWeek());
}
An instance of the datetime class can be initialized from many different sources: the system clock, a formatted string, or from the number of seconds (and optionally microseconds) since 1970.
#include <rudiments/datetime.h>
#include <rudiments/stdio.h>
int main(int argc, const char **argv) {
datetime dt;
// initialize from system date/time
dt.getSystemDateAndTime();
stdoutput.printf("system date/time: %s\n\n",dt.getString(true));
// initialize from a formatted string
dt.initialize("01/02/2000 03:04:05 EDT");
stdoutput.printf("formatted string: %s\n\n",dt.getString(true));
// initialize from the number of seconds since 1970
dt.initialize(40000000);
stdoutput.printf("seconds since 1970: %s\n\n",dt.getString(true));
// initialize from the number of seconds and microseconds since 1970
dt.initialize(40000000,100);
stdoutput.printf("sec/usec since 1970: %s\n\n",dt.getString(true));
}
The datetime class also provides methods for doing date math.
#include <rudiments/datetime.h>
#include <rudiments/stdio.h>
int main(int argc, const char **argv) {
datetime dt;
// initialize from system date/time
dt.getSystemDateAndTime();
stdoutput.printf("current date/time: %s\n\n",dt.getString(true));
// add three years, months, days,
// hours, minutes, seconds, and microseconds
dt.addYears(3);
dt.addMonths(3);
dt.addDays(3);
dt.addHours(3);
dt.addMinutes(3);
dt.addSeconds(3);
dt.addMicroseconds(3);
stdoutput.printf("new date/time: %s\n\n",dt.getString(true));
// subtract three years, months, days,
// hours, minutes, seconds, and microseconds
dt.addYears(-3);
dt.addMonths(-3);
dt.addDays(-3);
dt.addHours(-3);
dt.addMinutes(-3);
dt.addSeconds(-3);
dt.addMicroseconds(-3);
stdoutput.printf("original date/time: %s\n\n",dt.getString(true));
}
The datetime class also provides methods for getting information about timezones and converting date/times between timezones.
#include <rudiments/datetime.h>
#include <rudiments/stdio.h>
int main(int argc, const char **argv) {
datetime dt;
// initialize from system date/time
dt.getSystemDateAndTime();
stdoutput.printf("local time: %s\n\n",dt.getString());
// get time zone abbreviations and offsets
const char * const *tzabbr=datetime::getTimeZoneAbbreviations();
const int32_t *tzoff=datetime::getTimeZoneOffsets();
// show the current time in different timezones around the world...
while (*tzabbr && *tzabbr[0]) {
// convert timezone
dt.adjustTimeZone(*tzabbr);
stdoutput.printf("% 14s (% 6d sec from GMT): %s\n",
*tzabbr,*tzoff,dt.getString());
tzabbr++;
tzoff++;
}
}