#include <NTPClient.h>  //https://github.com/arduino-libraries/NTPClient
#include <WiFiUdp.h>

#include <ESP8266WiFi.h>  //for ESP8266
//#include <WiFi.h> //for ESP32

int timezone = -5; //hours, -5 for NY
int dst = 60; //60 (minutes, for summer in some country) or 0 
WiFiUDP ntpUDP;
// You can specify the time server pool and the offset (in seconds, can be
// changed later with setTimeOffset() ). Additionaly you can specify the
// update interval (in milliseconds, can be changed using setUpdateInterval() ).

NTPClient timeClient(ntpUDP, "us.pool.ntp.org", timezone*3600+dst*60, 24*60*60*1000/*update once a day*/);


void setup() 
  {
  Serial.begin(115200);
  while (!Serial) { ; }   // wait for Serial port to connect. Needed for native USB port only
  Serial.println();
  WiFi.begin("YOUR SSID", "YOUR PWD");
  while (WiFi.status() != WL_CONNECTED) 
    {
    Serial.print(".");
    delay(250);
    }
  Serial.println();
  Serial.print("WiFi connected with ip ");  
  Serial.println(WiFi.localIP());
  
  timeClient.begin();
}

boolean gotUpdated = false;
void loop() 
{
  timeClient.update();
  Serial.printf("runtime: %dmS, SNTP EpochTime: %dS, NTP Time: ", millis(), timeClient.getEpochTime()); 
  Serial.print(timeClient.getFormattedTime());
  if ((!gotUpdated) && ((int32_t)timeClient.getEpochTime() > 30000))
    {
    gotUpdated = true;
    Serial.print("  <-- NTP TIME UPDATED!!");
    }
  Serial.println();
  
  delay(1000);
}