diff --git a/NTPClient.cpp b/NTPClient.cpp index 760e142..327680c 100755 --- a/NTPClient.cpp +++ b/NTPClient.cpp @@ -207,4 +207,28 @@ void NTPClient::sendNTPPacket() { void NTPClient::setRandomPort(unsigned int minValue, unsigned int maxValue) { randomSeed(analogRead(0)); this->_port = random(minValue, maxValue); -} \ No newline at end of file +} +String NTPClient::getFormattedDate() { + unsigned long rawTime = this->getEpochTime() / 86400L; // in days + unsigned long days = 0, year = 1970; + uint8_t month; + static const uint8_t monthDays[]={31,28,31,30,31,30,31,31,30,31,30,31}; + + while((days += (LEAP_YEAR(year) ? 366 : 365)) <= rawTime) + year++; + rawTime -= days - (LEAP_YEAR(year) ? 366 : 365); // now it is days in this year, starting at 0 + days=0; + for (month=0; month<12; month++) { + uint8_t monthLength; + if (month==1) { // february + monthLength = LEAP_YEAR(year) ? 29 : 28; + } else { + monthLength = monthDays[month]; + } + if (rawTime < monthLength) break; + rawTime -= monthLength; + } + String monthStr = ++month < 10 ? "0" + String(month) : String(month); // jan is month 1 + String dayStr = ++rawTime < 10 ? "0" + String(rawTime) : String(rawTime); // day of month + return String(year) + "-" + monthStr + "-" + dayStr + "T" + this->getFormattedTime(secs ? secs : 0) + "Z"; +} diff --git a/NTPClient.h b/NTPClient.h index b518c28..2eb6cf0 100755 --- a/NTPClient.h +++ b/NTPClient.h @@ -94,6 +94,11 @@ class NTPClient { * @return time formatted like `hh:mm:ss` */ String getFormattedTime() const; + + /** + * @return date and time seperated by T and Z obtained from the epoch time + */ + String getFormattedDate(); /** * @return time in seconds since Jan. 1, 1970