mirror of
https://github.com/gunner47/GyverLamp.git
synced 2025-08-06 16:47:17 +03:00
124 lines
4.4 KiB
C++
124 lines
4.4 KiB
C++
// 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 multiple time zones.
|
|
// Jack Christensen Mar 2012
|
|
//
|
|
// For time zone information:
|
|
// http://www.timeanddate.com/worldclock/
|
|
|
|
#include <Timezone.h> // https://github.com/JChristensen/Timezone
|
|
|
|
// Australia Eastern Time Zone (Sydney, Melbourne)
|
|
TimeChangeRule aEDT = {"AEDT", First, Sun, Oct, 2, 660}; // UTC + 11 hours
|
|
TimeChangeRule aEST = {"AEST", First, Sun, Apr, 3, 600}; // UTC + 10 hours
|
|
Timezone ausET(aEDT, aEST);
|
|
|
|
// Moscow Standard Time (MSK, does not observe DST)
|
|
TimeChangeRule msk = {"MSK", Last, Sun, Mar, 1, 180};
|
|
Timezone tzMSK(msk);
|
|
|
|
// Central European Time (Frankfurt, Paris)
|
|
TimeChangeRule CEST = {"CEST", Last, Sun, Mar, 2, 120}; // Central European Summer Time
|
|
TimeChangeRule CET = {"CET ", Last, Sun, Oct, 3, 60}; // Central European Standard Time
|
|
Timezone CE(CEST, CET);
|
|
|
|
// United Kingdom (London, Belfast)
|
|
TimeChangeRule BST = {"BST", Last, Sun, Mar, 1, 60}; // British Summer Time
|
|
TimeChangeRule GMT = {"GMT", Last, Sun, Oct, 2, 0}; // Standard Time
|
|
Timezone UK(BST, GMT);
|
|
|
|
// UTC
|
|
TimeChangeRule utcRule = {"UTC", Last, Sun, Mar, 1, 0}; // UTC
|
|
Timezone UTC(utcRule);
|
|
|
|
// US Eastern Time Zone (New York, Detroit)
|
|
TimeChangeRule usEDT = {"EDT", Second, Sun, Mar, 2, -240}; // Eastern Daylight Time = UTC - 4 hours
|
|
TimeChangeRule usEST = {"EST", First, Sun, Nov, 2, -300}; // Eastern Standard Time = UTC - 5 hours
|
|
Timezone usET(usEDT, usEST);
|
|
|
|
// US Central Time Zone (Chicago, Houston)
|
|
TimeChangeRule usCDT = {"CDT", Second, Sun, Mar, 2, -300};
|
|
TimeChangeRule usCST = {"CST", First, Sun, Nov, 2, -360};
|
|
Timezone usCT(usCDT, usCST);
|
|
|
|
// US Mountain Time Zone (Denver, Salt Lake City)
|
|
TimeChangeRule usMDT = {"MDT", Second, Sun, Mar, 2, -360};
|
|
TimeChangeRule usMST = {"MST", First, Sun, Nov, 2, -420};
|
|
Timezone usMT(usMDT, usMST);
|
|
|
|
// Arizona is US Mountain Time Zone but does not use DST
|
|
Timezone usAZ(usMST);
|
|
|
|
// US Pacific Time Zone (Las Vegas, Los Angeles)
|
|
TimeChangeRule usPDT = {"PDT", Second, Sun, Mar, 2, -420};
|
|
TimeChangeRule usPST = {"PST", First, Sun, Nov, 2, -480};
|
|
Timezone usPT(usPDT, usPST);
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(115200);
|
|
|
|
// set the system time to UTC
|
|
// warning: assumes that compileTime() returns US EDT
|
|
// adjust the following line accordingly if you're in another time zone
|
|
setTime(compileTime() + 240 * 60);
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
time_t utc = now();
|
|
Serial.println();
|
|
printDateTime(ausET, utc, "Sydney");
|
|
printDateTime(tzMSK, utc, " Moscow");
|
|
printDateTime(CE, utc, "Paris");
|
|
printDateTime(UK, utc, " London");
|
|
printDateTime(UTC, utc, " Universal Coordinated Time");
|
|
printDateTime(usET, utc, " New York");
|
|
printDateTime(usCT, utc, " Chicago");
|
|
printDateTime(usMT, utc, " Denver");
|
|
printDateTime(usAZ, utc, " Phoenix");
|
|
printDateTime(usPT, utc, " Los Angeles");
|
|
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
|
|
}
|
|
|
|
// given a Timezone object, UTC and a string description, convert and print local time with time zone
|
|
void printDateTime(Timezone tz, time_t utc, const char *descr)
|
|
{
|
|
char buf[40];
|
|
char m[4]; // temporary storage for month string (DateStrings.cpp uses shared buffer)
|
|
TimeChangeRule *tcr; // pointer to the time change rule, use to get the TZ abbrev
|
|
|
|
time_t t = tz.toLocal(utc, &tcr);
|
|
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), tcr -> abbrev);
|
|
Serial.print(buf);
|
|
Serial.print(' ');
|
|
Serial.println(descr);
|
|
}
|
|
|