// Arduino Timezone Library Copyright (C) 2018 by Jack Christensen and // licensed under GNU GPL v3.0, https://www.gnu.org/licenses/gpl.html // // Arduino Timezone Library example sketch. // Self-adjusting clock for one time zone. // TimeChangeRules can be hard-coded or read from EEPROM, see comments. // Jack Christensen Mar 2012 #include // https://github.com/JChristensen/Timezone // US Eastern Time Zone (New York, Detroit) TimeChangeRule myDST = {"EDT", Second, Sun, Mar, 2, -240}; // Daylight time = UTC - 4 hours TimeChangeRule mySTD = {"EST", First, Sun, Nov, 2, -300}; // Standard time = UTC - 5 hours Timezone myTZ(myDST, mySTD); // If TimeChangeRules are already stored in EEPROM, comment out the three // lines above and uncomment the line below. //Timezone myTZ(100); // assumes rules stored at EEPROM address 100 TimeChangeRule *tcr; // pointer to the time change rule, use to get TZ abbrev void setup() { Serial.begin(115200); setTime(myTZ.toUTC(compileTime())); //setTime(01, 55, 00, 11, 3, 2012); //another way to set the time (hr,min,sec,day,mnth,yr) } void loop() { time_t utc = now(); time_t local = myTZ.toLocal(utc, &tcr); Serial.println(); printDateTime(utc, "UTC"); printDateTime(local, tcr -> abbrev); delay(10000); } // Function to return the compile date and time as a time_t value time_t compileTime() { const time_t FUDGE(10); // fudge factor to allow for compile time (seconds, YMMV) const char *compDate = __DATE__, *compTime = __TIME__, *months = "JanFebMarAprMayJunJulAugSepOctNovDec"; char chMon[3], *m; tmElements_t tm; strncpy(chMon, compDate, 3); chMon[3] = '\0'; m = strstr(months, chMon); tm.Month = ((m - months) / 3 + 1); tm.Day = atoi(compDate + 4); tm.Year = atoi(compDate + 7) - 1970; tm.Hour = atoi(compTime); tm.Minute = atoi(compTime + 3); tm.Second = atoi(compTime + 6); time_t t = makeTime(tm); return t + FUDGE; // add fudge factor to allow for compile time } // format and print a time_t value, with a time zone appended. void printDateTime(time_t t, const char *tz) { char buf[32]; char m[4]; // temporary storage for month string (DateStrings.cpp uses shared buffer) strcpy(m, monthShortStr(month(t))); sprintf(buf, "%.2d:%.2d:%.2d %s %.2d %s %d %s", hour(t), minute(t), second(t), dayShortStr(weekday(t)), day(t), m, year(t), tz); Serial.println(buf); }