diff --git a/NTPClient.cpp b/NTPClient.cpp index fffe105..23c03f1 100755 --- a/NTPClient.cpp +++ b/NTPClient.cpp @@ -145,6 +145,23 @@ int NTPClient::getSeconds() const { return (this->getEpochTime() % 60); } +DateTime NTPClient::getDateTime() const { + struct tm * ts; + time_t rawTime = this->getEpochTime(); + ts = localtime(&rawTime); + DateTime dt = {ts->tm_sec, ts->tm_min, ts->tm_hour, ts->tm_mday, (ts->tm_mon + 1), (ts->tm_year + 1900)}; + return dt; +} + +String NTPClient::getFormattedDateTime(const char* dateTimeFormat) const { + struct tm * ts; + time_t rawTime = this->getEpochTime(); + ts = localtime(&rawTime); + char buf[64]; + strftime(buf, sizeof(buf), dateTimeFormat, ts); + return String(buf); +} + String NTPClient::getFormattedTime() const { unsigned long rawTime = this->getEpochTime(); unsigned long hours = (rawTime % 86400L) / 3600; diff --git a/NTPClient.h b/NTPClient.h index 20ec43b..638b449 100755 --- a/NTPClient.h +++ b/NTPClient.h @@ -3,11 +3,21 @@ #include "Arduino.h" #include +#include #define SEVENZYYEARS 2208988800UL #define NTP_PACKET_SIZE 48 #define NTP_DEFAULT_LOCAL_PORT 1337 +struct DateTime { + int dt_seconds; + int dt_minutes; + int dt_hours; + int dt_date; + int dt_month; + int dt_year; +}; + class NTPClient { private: UDP* _udp; @@ -74,6 +84,17 @@ class NTPClient { int getMinutes() const; int getSeconds() const; + /** + * Get date time as a struct which contains + * Year, Month, Date, Hours, Minutes, Seconds + */ + DateTime getDateTime() const; + + /** + * Return the date time as a String with the given format (Ex: %Y/%m/%d %H:%M:%S) + */ + String getFormattedDateTime(const char* dateTimeFormat) const; + /** * Changes the time offset. Useful for changing timezones dynamically */ diff --git a/keywords.txt b/keywords.txt index 6f7bc6f..0a0a366 100644 --- a/keywords.txt +++ b/keywords.txt @@ -21,3 +21,5 @@ getEpochTime KEYWORD2 setTimeOffset KEYWORD2 setUpdateInterval KEYWORD2 setPoolServerName KEYWORD2 +getDateTime KEYWORD2 +getFormattedDateTime KEYWORD2