This one looks like a combination of Fabrice Weinberg's NTPClient, and the Timzone library by Jack Christensen:
It's devoid of examples, but it's on my list to try because it puts both NTP time, and timezone calculations, in one place.
EDIT: It doesn't appear to work. Here's what I used to test:
#include <WiFi.h>
#include <TimeLib.h>
#include <NTPClientTZ.h>
#include <SPI.h>
// initialize and instantiate tz object
//TimeChangeRule dSt; // = {};
//TimeChangeRule sTd; // = {};
//Timezone1 tz(dSt, sTd);
const char *ssid = "SSID";
const char *password = "Password";
TimeChangeRule dSt = {"DST", 2, 1, 3, 2, 0}; // March, 2nd Sunday, 2:00am
TimeChangeRule sTd = {"STD", 1, 1, 11, 2, 0}; // November, 1st Sunday, 2:00am
// You can specify the time server pool and the offset, (in seconds)
// additionaly you can specify the update interval (in milliseconds).
NTPClientTZ timeClient("us.pool.ntp.org", 3600, 60000, dSt, sTd);
void setup() {
Serial.begin(115200);
delay(500);
WiFi.begin(ssid, password);
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 );
Serial.print ( "." );
}
//changeRule();
}
void loop() {
timeClient.update();
Serial.println(timeClient.getFormattedTime());
delay(1000);
}
void changeRule() {
// rule, week of month, day of week, month, hour, offset
TimeChangeRule dSt = {"DST", 2, 1, 3, 2, 0}; // March, 2nd Sunday, 2:00am
TimeChangeRule sTd = {"STD", 1, 1, 11, 2, 0}; // November, 1st Sunday, 2:00am
timeClient.setRule(dSt, sTd); // set rules
}