Sming Framework API
Sming - Open Source framework for high efficiency WiFi SoC ESP8266 native development with C++ language.
DateTime Class Reference

Date and time class. More...

#include <DateTime.h>

Public Member Functions

 DateTime ()
 Instantiate an uninitialised date and time object. More...
 
 DateTime (time_t time)
 Instantiate a date and time object. More...
 
 operator time_t ()
 Get current Unix time. More...
 
void setTime (time_t time)
 Set time using Unix time. More...
 
void setTime (int8_t sec, int8_t min, int8_t hour, int8_t day, int8_t month, int16_t year)
 Set time using time and date component values. More...
 
bool parseHttpDate (String httpDate)
 Parse a HTTP full date and set time and date. More...
 
bool isNull ()
 Check if time date object is initialised. More...
 
time_t toUnixTime ()
 Get Unix time. More...
 
String toShortDateString ()
 Get human readable date. More...
 
String toShortTimeString (bool includeSeconds=false)
 Get human readable time. More...
 
String toFullDateTimeString ()
 Get human readable date and time. More...
 
String toISO8601 ()
 
void addMilliseconds (long add)
 Add time to date time object. More...
 

Static Public Member Functions

static void convertFromUnixTime (time_t timep, int8_t *psec, int8_t *pmin, int8_t *phour, int8_t *pday, int8_t *pwday, int8_t *pmonth, int16_t *pyear)
 Convert from Unix time to individual time components. More...
 
static time_t convertToUnixTime (int8_t sec, int8_t min, int8_t hour, int8_t day, int8_t month, int16_t year)
 Convert from individual time components to Unix time. More...
 

Public Attributes

int8_t Hour
 Hour (0-23) More...
 
int8_t Minute
 Minute (0-59) More...
 
int8_t Second
 Second (0-59) More...
 
int16_t Milliseconds
 Milliseconds (0-999) More...
 
int8_t Day
 Day of month (1-31) More...
 
int8_t DayofWeek
 Day of week (0-6 Sunday is day 0) More...
 
int8_t Month
 Month (0-11 Jan is month 0) More...
 
int16_t Year
 Full Year number. More...
 

Detailed Description

Date and time class.

Date and time functions mostly work with Unix time, the quantity of seconds since 00:00:00 1970-01-01. There is no support for leap seconds which are added (and in theory, removed) occasionally to compensate for earth rotation variation. This means that timespan calculation and free-running clocks may be inaccurate if they span leap seconds. To facilitate leap seconds, reference must be made to leap second table. This will not be done within the Sming framework and must be handled by application code if required.

Note
Sming uses 32-bit signed integer for its time_t data type which supports a range of +/-68 years. This means Sming is susceptible to Year 2038 problem.

Constructor & Destructor Documentation

DateTime::DateTime ( )

Instantiate an uninitialised date and time object.

DateTime::DateTime ( time_t  time)

Instantiate a date and time object.

Parameters
timeUnix time to assign to object

Member Function Documentation

void DateTime::addMilliseconds ( long  add)

Add time to date time object.

Parameters
addQuantity of milliseconds to add to object
static void DateTime::convertFromUnixTime ( time_t  timep,
int8_t *  psec,
int8_t *  pmin,
int8_t *  phour,
int8_t *  pday,
int8_t *  pwday,
int8_t *  pmonth,
int16_t *  pyear 
)
static

Convert from Unix time to individual time components.

Parameters
timepUnix time date value to convert
psecPointer to integer to hold resulting seconds
pminPointer to integer to hold resulting minutes
phourPointer to integer to hold resulting hour
pdayPointer to integer to hold resulting day of month
pwdayPointer to integer to hold resulting day of week
pmonthPointer to integer to hold resulting month
pyearPointer to integer to hold resulting year
Note
This is a more compact version of the C library localtime function
Pass the Unix timedate value and pointers to existing integers. The integers are updated with the converted values
This static function may be used without instantiating a DateTime object, e.g. DateTime::convertFromUnixTime(...);
32-bit Unix time has year 2036 issue.
Unix time does not account for leap seconds. To convert Unix time to UTC requires reference to a leap second table.
static time_t DateTime::convertToUnixTime ( int8_t  sec,
int8_t  min,
int8_t  hour,
int8_t  day,
int8_t  month,
int16_t  year 
)
static

Convert from individual time components to Unix time.

Parameters
secSeconds
minMinutes
hourHours
dayDays
monthMonth (0-11, Jan=0, Feb=1, ...Dec=11)
yearYear (1901-2036), either full 4 digit year or 2 digits for 1970-2036
Note
Seconds, minutes, hours and days may be any value, e.g. to calculate the value for 300 days since 1970 (epoch), set day=300
This static function may be used without instantiating a DateTime object, e.g. time_t unixTime = DateTime::convertToUnixTime(...);
32-bit Unix time is valid between 1901-12-13 and 03:14:07 2038-01-19
Unix time does not account for leap seconds. To convert Unix time to UTC requires reference to a leap second table.
bool DateTime::isNull ( )

Check if time date object is initialised.

Return values
Trueif object has no value. False if initialised.
DateTime::operator time_t ( )
inline

Get current Unix time.

Return values
time_tQuantity of seconds since 00:00:00 1970-01-01
bool DateTime::parseHttpDate ( String  httpDate)

Parse a HTTP full date and set time and date.

Parameters
httpDateHTTP full date in RFC 1123 format, e.g. Sun, 06 Nov 1994 08:49:37 GMT
Return values
boolTrue on success
Note
Also supports obsolete RFC 850 date format, e.g. Sunday, 06-Nov-94 08:49:37 GMT where 2 digit year represents range 1970-2069
GMT suffix is optional and is always assumed / ignored
void DateTime::setTime ( time_t  time)

Set time using Unix time.

Parameters
timeUnix time to set object time to
void DateTime::setTime ( int8_t  sec,
int8_t  min,
int8_t  hour,
int8_t  day,
int8_t  month,
int16_t  year 
)

Set time using time and date component values.

Parameters
secSeconds
minMinutes
dayDay of month
monthMonth (0=Jan, 11=Dec)
yearYear
String DateTime::toFullDateTimeString ( )

Get human readable date and time.

Return values
StringDate and time in format dd.mm.yyyy hh:mm:ss
String DateTime::toShortDateString ( )

Get human readable date.

Return values
StringDate in requested format, e.g. dd.mm.yyyy
String DateTime::toShortTimeString ( bool  includeSeconds = false)

Get human readable time.

Parameters
includeSecondsTrue to include seconds (Default: false)
Return values
StringTime in format hh:mm or hh:mm:ss
time_t DateTime::toUnixTime ( )

Get Unix time.

Return values
time_tUnix time, quantity of seconds since 00:00:00 1970-01-01
Note
Unix time does not account for leap seconds. To convert Unix time to UTC requires reference to a leap second table.

Member Data Documentation

int8_t DateTime::Day

Day of month (1-31)

int8_t DateTime::DayofWeek

Day of week (0-6 Sunday is day 0)

int8_t DateTime::Hour

Hour (0-23)

int16_t DateTime::Milliseconds

Milliseconds (0-999)

int8_t DateTime::Minute

Minute (0-59)

int8_t DateTime::Month

Month (0-11 Jan is month 0)

int8_t DateTime::Second

Second (0-59)

int16_t DateTime::Year

Full Year number.