Add timezone to possix format

This commit is contained in:
fvanroie 2023-01-31 03:34:51 +01:00
parent aaa94d263d
commit f842a744e4
2 changed files with 1085 additions and 26 deletions

View File

@ -7,10 +7,12 @@
#include <Arduino.h> #include <Arduino.h>
#include "ArduinoLog.h" #include "ArduinoLog.h"
#include "hasp_conf.h" #include "hasp_conf.h"
#include "hasp_time.h"
#include "hal/hasp_hal.h" #include "hal/hasp_hal.h"
#include "hasp_debug.h" #include "hasp_debug.h"
#include "hasp_config.h" #include "hasp_config.h"
#include "hasp/hasp_parser.h"
#if defined(ARDUINO_ARCH_ESP32) #if defined(ARDUINO_ARCH_ESP32)
#include "Preferences.h" #include "Preferences.h"
@ -18,22 +20,6 @@
#include "nvs_flash.h" #include "nvs_flash.h"
#endif #endif
#ifndef MYTZ
#define MYTZ "EST5EDT,M3.2.0/2,M11.1.0"
#endif
#ifndef NTPSERVER1
#define NTPSERVER1 "pool.ntp.org"
#endif
#ifndef NTPSERVER2
#define NTPSERVER2 "time.nist.gov"
#endif
#ifndef NTPSERVER3
#define NTPSERVER3 "time.google.com"
#endif
#if defined(ARDUINO_ARCH_ESP32) #if defined(ARDUINO_ARCH_ESP32)
// These strings must be constant and kept in memory // These strings must be constant and kept in memory
String mytz((char*)0); String mytz((char*)0);
@ -50,21 +36,610 @@ void timeSetup()
#endif #endif
#if defined(ARDUINO_ARCH_ESP32) #if defined(ARDUINO_ARCH_ESP32)
Preferences preferences; Preferences preferences;
nvs_user_begin(preferences,"time", true); nvs_user_begin(preferences, "time", true);
mytz = preferences.getString("tz", MYTZ); String zone((char*)0);
zone = preferences.getString("zone", TIMEZONE);
// mytz = preferences.getString("tz", MYTZ);
mytz = time_zone_to_possix(zone.c_str());
ntp1 = preferences.getString("ntp1", NTPSERVER1); ntp1 = preferences.getString("ntp1", NTPSERVER1);
ntp2 = preferences.getString("ntp2", NTPSERVER2); ntp2 = preferences.getString("ntp2", NTPSERVER2);
ntp3 = preferences.getString("ntp3", NTPSERVER3); ntp3 = preferences.getString("ntp3", NTPSERVER3);
LOG_VERBOSE(TAG_TIME, F("TIMEZONE: %s"), mytz.c_str()); LOG_VERBOSE(TAG_TIME, F("%s => %s"), zone.c_str(), mytz.c_str());
LOG_VERBOSE(TAG_TIME, F("NTPSERVER: %s %s %s"), ntp1.c_str(), ntp2.c_str(), ntp3.c_str()); LOG_VERBOSE(TAG_TIME, F("NTP: %s %s %s"), ntp1.c_str(), ntp2.c_str(), ntp3.c_str());
configTzTime(mytz.c_str(), ntp1.c_str(), ntp2.c_str(), ntp3.c_str()); configTzTime(mytz.c_str(), ntp1.c_str(), ntp2.c_str(), ntp3.c_str());
preferences.end(); preferences.end();
#endif #endif
} }
String time_zone_to_possix(const char* timezone)
{
#if defined(ARDUINO_ARCH_ESP32)
uint16_t sdbm = 0;
if(timezone == strstr(timezone, "Etc/GMT")) { // startsWith Etc/GMT
int offset = atoi(timezone + 7);
const uint16_t gmt[] = {TZ_ETC_GMT__14, TZ_ETC_GMT__13, TZ_ETC_GMT__12, TZ_ETC_GMT__11, TZ_ETC_GMT__10,
TZ_ETC_GMT__9, TZ_ETC_GMT__8, TZ_ETC_GMT__7, TZ_ETC_GMT__6, TZ_ETC_GMT__5,
TZ_ETC_GMT__4, TZ_ETC_GMT__3, TZ_ETC_GMT__2, TZ_ETC_GMT__1, TZ_ETC_GMT0,
TZ_ETC_GMT1, TZ_ETC_GMT2, TZ_ETC_GMT3, TZ_ETC_GMT4, TZ_ETC_GMT5,
TZ_ETC_GMT6, TZ_ETC_GMT7, TZ_ETC_GMT8, TZ_ETC_GMT9, TZ_ETC_GMT10,
TZ_ETC_GMT11, TZ_ETC_GMT12};
offset += 14;
if(offset >= 0 && offset < sizeof(gmt) / sizeof(gmt[0])) {
sdbm = gmt[offset];
LOG_DEBUG(TAG_TIME, "Etc/GMT%d (%d)", offset - 14, sdbm);
} else {
LOG_WARNING(TAG_TIME, "Invalid offset Etc/GMT%d", offset - 14);
}
} else {
sdbm = Parser::get_sdbm(timezone);
}
switch(sdbm) {
case TZ_ANTARCTICA_TROLL:
return "<+00>0<+02>-2,M3.5.0/1,M10.5.0/3";
case TZ_AFRICA_CASABLANCA:
case TZ_AFRICA_EL_AAIUN:
case TZ_ETC_GMT__1:
return "<+01>-1";
case TZ_ETC_GMT__2:
return "<+02>-2";
case TZ_ANTARCTICA_SYOWA:
case TZ_ASIA_ADEN:
case TZ_ASIA_AMMAN:
case TZ_ASIA_BAGHDAD:
case TZ_ASIA_BAHRAIN:
case TZ_ASIA_DAMASCUS:
case TZ_ASIA_KUWAIT:
case TZ_ASIA_QATAR:
case TZ_ASIA_RIYADH:
case TZ_ETC_GMT__3:
case TZ_EUROPE_ISTANBUL:
case TZ_EUROPE_KIROV:
case TZ_EUROPE_MINSK:
case TZ_EUROPE_VOLGOGRAD:
return "<+03>-3";
case TZ_ASIA_TEHRAN:
return "<+0330>-3:30";
case TZ_ASIA_BAKU:
case TZ_ASIA_DUBAI:
case TZ_ASIA_MUSCAT:
case TZ_ASIA_TBILISI:
case TZ_ASIA_YEREVAN:
case TZ_ETC_GMT__4:
case TZ_EUROPE_ASTRAKHAN:
case TZ_EUROPE_SAMARA:
case TZ_EUROPE_SARATOV:
case TZ_EUROPE_ULYANOVSK:
case TZ_INDIAN_MAHE:
case TZ_INDIAN_MAURITIUS:
case TZ_INDIAN_REUNION:
return "<+04>-4";
case TZ_ASIA_KABUL:
return "<+0430>-4:30";
case TZ_ANTARCTICA_MAWSON:
case TZ_ASIA_AQTAU:
case TZ_ASIA_AQTOBE:
case TZ_ASIA_ASHGABAT:
case TZ_ASIA_ATYRAU:
case TZ_ASIA_DUSHANBE:
case TZ_ASIA_ORAL:
case TZ_ASIA_QYZYLORDA:
case TZ_ASIA_SAMARKAND:
case TZ_ASIA_TASHKENT:
case TZ_ASIA_YEKATERINBURG:
case TZ_ETC_GMT__5:
case TZ_INDIAN_KERGUELEN:
case TZ_INDIAN_MALDIVES:
return "<+05>-5";
case TZ_ASIA_COLOMBO:
return "<+0530>-5:30";
case TZ_ASIA_KATHMANDU:
return "<+0545>-5:45";
case TZ_ANTARCTICA_VOSTOK:
case TZ_ASIA_ALMATY:
case TZ_ASIA_BISHKEK:
case TZ_ASIA_DHAKA:
case TZ_ASIA_OMSK:
case TZ_ASIA_THIMPHU:
case TZ_ASIA_URUMQI:
case TZ_ETC_GMT__6:
case TZ_INDIAN_CHAGOS:
return "<+06>-6";
case TZ_ASIA_YANGON:
case TZ_INDIAN_COCOS:
return "<+0630>-6:30";
case TZ_ANTARCTICA_DAVIS:
case TZ_ASIA_BANGKOK:
case TZ_ASIA_BARNAUL:
case TZ_ASIA_HO_CHI_MINH:
case TZ_ASIA_HOVD:
case TZ_ASIA_KRASNOYARSK:
case TZ_ASIA_NOVOKUZNETSK:
case TZ_ASIA_NOVOSIBIRSK:
case TZ_ASIA_PHNOM_PENH:
case TZ_ASIA_TOMSK:
case TZ_ASIA_VIENTIANE:
case TZ_ETC_GMT__7:
case TZ_INDIAN_CHRISTMAS:
return "<+07>-7";
case TZ_ASIA_BRUNEI:
case TZ_ASIA_CHOIBALSAN:
case TZ_ASIA_IRKUTSK:
case TZ_ASIA_KUALA_LUMPUR:
case TZ_ASIA_KUCHING:
case TZ_ASIA_SINGAPORE:
case TZ_ASIA_ULAANBAATAR:
case TZ_ETC_GMT__8:
return "<+08>-8";
case TZ_AUSTRALIA_EUCLA:
return "<+0845>-8:45";
case TZ_ASIA_CHITA:
case TZ_ASIA_DILI:
case TZ_ASIA_KHANDYGA:
case TZ_ASIA_YAKUTSK:
case TZ_ETC_GMT__9:
case TZ_PACIFIC_PALAU:
return "<+09>-9";
case TZ_ANTARCTICA_DUMONTDURVILLE:
case TZ_ASIA_UST__NERA:
case TZ_ASIA_VLADIVOSTOK:
case TZ_ETC_GMT__10:
case TZ_PACIFIC_CHUUK:
case TZ_PACIFIC_PORT_MORESBY:
return "<+10>-10";
case TZ_AUSTRALIA_LORD_HOWE:
return "<+1030>-10:30<+11>-11,M10.1.0,M4.1.0";
case TZ_ANTARCTICA_CASEY:
case TZ_ASIA_MAGADAN:
case TZ_ASIA_SAKHALIN:
case TZ_ASIA_SREDNEKOLYMSK:
case TZ_ETC_GMT__11:
case TZ_PACIFIC_BOUGAINVILLE:
case TZ_PACIFIC_EFATE:
case TZ_PACIFIC_GUADALCANAL:
case TZ_PACIFIC_KOSRAE:
case TZ_PACIFIC_NOUMEA:
case TZ_PACIFIC_POHNPEI:
return "<+11>-11";
case TZ_PACIFIC_NORFOLK:
return "<+11>-11<+12>,M10.1.0,M4.1.0/3";
case TZ_ASIA_ANADYR:
case TZ_ASIA_KAMCHATKA:
case TZ_ETC_GMT__12:
case TZ_PACIFIC_FIJI:
case TZ_PACIFIC_FUNAFUTI:
case TZ_PACIFIC_KWAJALEIN:
case TZ_PACIFIC_MAJURO:
case TZ_PACIFIC_NAURU:
case TZ_PACIFIC_TARAWA:
case TZ_PACIFIC_WAKE:
case TZ_PACIFIC_WALLIS:
return "<+12>-12";
case TZ_PACIFIC_CHATHAM:
return "<+1245>-12:45<+1345>,M9.5.0/2:45,M4.1.0/3:45";
case TZ_ETC_GMT__13:
case TZ_PACIFIC_APIA:
case TZ_PACIFIC_ENDERBURY:
case TZ_PACIFIC_FAKAOFO:
case TZ_PACIFIC_TONGATAPU:
return "<+13>-13";
case TZ_ETC_GMT__14:
case TZ_PACIFIC_KIRITIMATI:
return "<+14>-14";
case TZ_ATLANTIC_CAPE_VERDE:
case TZ_ETC_GMT1:
return "<-01>1";
case TZ_AMERICA_SCORESBYSUND:
case TZ_ATLANTIC_AZORES:
return "<-01>1<+00>,M3.5.0/0,M10.5.0/1";
case TZ_AMERICA_NORONHA:
case TZ_ATLANTIC_SOUTH_GEORGIA:
case TZ_ETC_GMT2:
return "<-02>2";
case TZ_AMERICA_ARAGUAINA:
case TZ_AMERICA_ARGENTINA_BUENOS_AIRES:
case TZ_AMERICA_ARGENTINA_CATAMARCA:
case TZ_AMERICA_ARGENTINA_CORDOBA:
case TZ_AMERICA_ARGENTINA_JUJUY:
case TZ_AMERICA_ARGENTINA_LA_RIOJA:
case TZ_AMERICA_ARGENTINA_MENDOZA:
case TZ_AMERICA_ARGENTINA_RIO_GALLEGOS:
case TZ_AMERICA_ARGENTINA_SALTA:
case TZ_AMERICA_ARGENTINA_SAN_JUAN:
case TZ_AMERICA_ARGENTINA_SAN_LUIS:
case TZ_AMERICA_ARGENTINA_TUCUMAN:
case TZ_AMERICA_ARGENTINA_USHUAIA:
case TZ_AMERICA_BAHIA:
case TZ_AMERICA_BELEM:
case TZ_AMERICA_CAYENNE:
case TZ_AMERICA_FORTALEZA:
case TZ_AMERICA_MACEIO:
case TZ_AMERICA_MONTEVIDEO:
case TZ_AMERICA_PARAMARIBO:
case TZ_AMERICA_PUNTA_ARENAS:
case TZ_AMERICA_RECIFE:
case TZ_AMERICA_SANTAREM:
case TZ_AMERICA_SAO_PAULO:
case TZ_ANTARCTICA_PALMER:
case TZ_ANTARCTICA_ROTHERA:
case TZ_ATLANTIC_STANLEY:
case TZ_ETC_GMT3:
return "<-03>3";
case TZ_AMERICA_MIQUELON:
return "<-03>3<-02>,M3.2.0,M11.1.0";
case TZ_AMERICA_GODTHAB:
case TZ_AMERICA_NUUK:
return "<-03>3<-02>,M3.4.6/22,J365/25";
case TZ_AMERICA_BOA_VISTA:
case TZ_AMERICA_CAMPO_GRANDE:
case TZ_AMERICA_CARACAS:
case TZ_AMERICA_CUIABA:
case TZ_AMERICA_GUYANA:
case TZ_AMERICA_LA_PAZ:
case TZ_AMERICA_MANAUS:
case TZ_AMERICA_PORTO_VELHO:
case TZ_ETC_GMT4:
return "<-04>4";
case TZ_AMERICA_ASUNCION:
return "<-04>4<-03>,M10.1.0/0,M3.4.0/0";
case TZ_AMERICA_SANTIAGO:
return "<-04>4<-03>,M9.1.0/0,M4.1.0/0";
case TZ_AMERICA_BOGOTA:
case TZ_AMERICA_EIRUNEPE:
case TZ_AMERICA_GUAYAQUIL:
case TZ_AMERICA_LIMA:
case TZ_AMERICA_RIO_BRANCO:
case TZ_ETC_GMT5:
return "<-05>5";
case TZ_ETC_GMT6:
case TZ_PACIFIC_GALAPAGOS:
return "<-06>6";
case TZ_PACIFIC_EASTER:
return "<-06>6<-05>,M9.1.6/22,M4.1.6/22";
case TZ_ETC_GMT7:
return "<-07>7";
case TZ_ETC_GMT8:
case TZ_PACIFIC_PITCAIRN:
return "<-08>8";
case TZ_ETC_GMT9:
case TZ_PACIFIC_GAMBIER:
return "<-09>9";
case TZ_PACIFIC_MARQUESAS:
return "<-0930>9:30";
case TZ_ETC_GMT10:
case TZ_PACIFIC_RAROTONGA:
case TZ_PACIFIC_TAHITI:
return "<-10>10";
case TZ_ETC_GMT11:
case TZ_PACIFIC_NIUE:
return "<-11>11";
case TZ_ETC_GMT12:
return "<-12>12";
case TZ_AUSTRALIA_DARWIN:
return "ACST-9:30";
case TZ_AUSTRALIA_ADELAIDE:
case TZ_AUSTRALIA_BROKEN_HILL:
return "ACST-9:30ACDT,M10.1.0,M4.1.0/3";
case TZ_AUSTRALIA_BRISBANE:
case TZ_AUSTRALIA_LINDEMAN:
return "AEST-10";
case TZ_ANTARCTICA_MACQUARIE:
case TZ_AUSTRALIA_CURRIE:
case TZ_AUSTRALIA_HOBART:
case TZ_AUSTRALIA_MELBOURNE:
case TZ_AUSTRALIA_SYDNEY:
return "AEST-10AEDT,M10.1.0,M4.1.0/3";
case TZ_AMERICA_ANCHORAGE:
case TZ_AMERICA_JUNEAU:
case TZ_AMERICA_METLAKATLA:
case TZ_AMERICA_NOME:
case TZ_AMERICA_SITKA:
case TZ_AMERICA_YAKUTAT:
return "AKST9AKDT,M3.2.0,M11.1.0";
case TZ_AMERICA_ANGUILLA:
case TZ_AMERICA_ANTIGUA:
case TZ_AMERICA_ARUBA:
case TZ_AMERICA_BARBADOS:
case TZ_AMERICA_BLANC__SABLON:
case TZ_AMERICA_CURACAO:
case TZ_AMERICA_DOMINICA:
case TZ_AMERICA_GRENADA:
case TZ_AMERICA_GUADELOUPE:
case TZ_AMERICA_KRALENDIJK:
case TZ_AMERICA_LOWER_PRINCES:
case TZ_AMERICA_MARIGOT:
case TZ_AMERICA_MARTINIQUE:
case TZ_AMERICA_MONTSERRAT:
case TZ_AMERICA_PORT_OF_SPAIN:
case TZ_AMERICA_PUERTO_RICO:
case TZ_AMERICA_SANTO_DOMINGO:
case TZ_AMERICA_ST_BARTHELEMY:
case TZ_AMERICA_ST_KITTS:
case TZ_AMERICA_ST_LUCIA:
case TZ_AMERICA_ST_THOMAS:
case TZ_AMERICA_ST_VINCENT:
case TZ_AMERICA_TORTOLA:
return "AST4";
case TZ_AMERICA_GLACE_BAY:
case TZ_AMERICA_GOOSE_BAY:
case TZ_AMERICA_HALIFAX:
case TZ_AMERICA_MONCTON:
case TZ_AMERICA_THULE:
case TZ_ATLANTIC_BERMUDA:
return "AST4ADT,M3.2.0,M11.1.0";
case TZ_AUSTRALIA_PERTH:
return "AWST-8";
case TZ_AFRICA_BLANTYRE:
case TZ_AFRICA_BUJUMBURA:
case TZ_AFRICA_GABORONE:
case TZ_AFRICA_HARARE:
case TZ_AFRICA_JUBA:
case TZ_AFRICA_KHARTOUM:
case TZ_AFRICA_KIGALI:
case TZ_AFRICA_LUBUMBASHI:
case TZ_AFRICA_LUSAKA:
case TZ_AFRICA_MAPUTO:
case TZ_AFRICA_WINDHOEK:
return "CAT-2";
case TZ_AFRICA_ALGIERS:
case TZ_AFRICA_TUNIS:
return "CET-1";
case TZ_AFRICA_CEUTA:
case TZ_ARCTIC_LONGYEARBYEN:
case TZ_EUROPE_AMSTERDAM:
case TZ_EUROPE_ANDORRA:
case TZ_EUROPE_BELGRADE:
case TZ_EUROPE_BERLIN:
case TZ_EUROPE_BRATISLAVA:
case TZ_EUROPE_BRUSSELS:
case TZ_EUROPE_BUDAPEST:
case TZ_EUROPE_BUSINGEN:
case TZ_EUROPE_COPENHAGEN:
case TZ_EUROPE_GIBRALTAR:
case TZ_EUROPE_LJUBLJANA:
case TZ_EUROPE_LUXEMBOURG:
case TZ_EUROPE_MADRID:
case TZ_EUROPE_MALTA:
case TZ_EUROPE_MONACO:
case TZ_EUROPE_OSLO:
case TZ_EUROPE_PARIS:
case TZ_EUROPE_PODGORICA:
case TZ_EUROPE_PRAGUE:
case TZ_EUROPE_ROME:
case TZ_EUROPE_SAN_MARINO:
case TZ_EUROPE_SARAJEVO:
case TZ_EUROPE_SKOPJE:
case TZ_EUROPE_STOCKHOLM:
case TZ_EUROPE_TIRANE:
case TZ_EUROPE_VADUZ:
case TZ_EUROPE_VATICAN:
case TZ_EUROPE_VIENNA:
case TZ_EUROPE_WARSAW:
case TZ_EUROPE_ZAGREB:
case TZ_EUROPE_ZURICH:
return "CET-1CEST,M3.5.0,M10.5.0/3";
case TZ_PACIFIC_GUAM:
case TZ_PACIFIC_SAIPAN:
return "ChST-10";
case TZ_AMERICA_HAVANA:
return "CST5CDT,M3.2.0/0,M11.1.0/1";
case TZ_AMERICA_BAHIA_BANDERAS:
case TZ_AMERICA_BELIZE:
case TZ_AMERICA_CHIHUAHUA:
case TZ_AMERICA_COSTA_RICA:
case TZ_AMERICA_EL_SALVADOR:
case TZ_AMERICA_GUATEMALA:
case TZ_AMERICA_MANAGUA:
case TZ_AMERICA_MERIDA:
case TZ_AMERICA_MEXICO_CITY:
case TZ_AMERICA_MONTERREY:
case TZ_AMERICA_REGINA:
case TZ_AMERICA_SWIFT_CURRENT:
case TZ_AMERICA_TEGUCIGALPA:
return "CST6";
case TZ_AMERICA_CHICAGO:
case TZ_AMERICA_INDIANA_KNOX:
case TZ_AMERICA_INDIANA_TELL_CITY:
case TZ_AMERICA_MATAMOROS:
case TZ_AMERICA_MENOMINEE:
case TZ_AMERICA_NORTH_DAKOTA_BEULAH:
case TZ_AMERICA_NORTH_DAKOTA_CENTER:
case TZ_AMERICA_NORTH_DAKOTA_NEW_SALEM:
case TZ_AMERICA_OJINAGA:
case TZ_AMERICA_RAINY_RIVER:
case TZ_AMERICA_RANKIN_INLET:
case TZ_AMERICA_RESOLUTE:
case TZ_AMERICA_WINNIPEG:
return "CST6CDT,M3.2.0,M11.1.0";
case TZ_ASIA_MACAU:
case TZ_ASIA_SHANGHAI:
case TZ_ASIA_TAIPEI:
return "CST-8";
case TZ_AFRICA_ADDIS_ABABA:
case TZ_AFRICA_ASMARA:
case TZ_AFRICA_DAR_ES_SALAAM:
case TZ_AFRICA_DJIBOUTI:
case TZ_AFRICA_KAMPALA:
case TZ_AFRICA_MOGADISHU:
case TZ_AFRICA_NAIROBI:
case TZ_INDIAN_ANTANANARIVO:
case TZ_INDIAN_COMORO:
case TZ_INDIAN_MAYOTTE:
return "EAT-3";
case TZ_AFRICA_CAIRO:
case TZ_AFRICA_TRIPOLI:
case TZ_EUROPE_KALININGRAD:
return "EET-2";
case TZ_EUROPE_CHISINAU:
return "EET-2EEST,M3.5.0,M10.5.0/3";
case TZ_ASIA_BEIRUT:
return "EET-2EEST,M3.5.0/0,M10.5.0/0";
case TZ_ASIA_FAMAGUSTA:
case TZ_ASIA_NICOSIA:
case TZ_EUROPE_ATHENS:
case TZ_EUROPE_BUCHAREST:
case TZ_EUROPE_HELSINKI:
case TZ_EUROPE_KIEV:
case TZ_EUROPE_MARIEHAMN:
case TZ_EUROPE_RIGA:
case TZ_EUROPE_SOFIA:
case TZ_EUROPE_TALLINN:
case TZ_EUROPE_UZHGOROD:
case TZ_EUROPE_VILNIUS:
case TZ_EUROPE_ZAPOROZHYE:
return "EET-2EEST,M3.5.0/3,M10.5.0/4";
case TZ_ASIA_GAZA:
case TZ_ASIA_HEBRON:
return "EET-2EEST,M3.5.6,M10.5.6";
case TZ_AMERICA_ATIKOKAN:
case TZ_AMERICA_CANCUN:
case TZ_AMERICA_CAYMAN:
case TZ_AMERICA_JAMAICA:
case TZ_AMERICA_PANAMA:
return "EST5";
case TZ_AMERICA_DETROIT:
case TZ_AMERICA_GRAND_TURK:
case TZ_AMERICA_INDIANA_INDIANAPOLIS:
case TZ_AMERICA_INDIANA_MARENGO:
case TZ_AMERICA_INDIANA_PETERSBURG:
case TZ_AMERICA_INDIANA_VEVAY:
case TZ_AMERICA_INDIANA_VINCENNES:
case TZ_AMERICA_INDIANA_WINAMAC:
case TZ_AMERICA_IQALUIT:
case TZ_AMERICA_KENTUCKY_LOUISVILLE:
case TZ_AMERICA_KENTUCKY_MONTICELLO:
case TZ_AMERICA_MONTREAL:
case TZ_AMERICA_NASSAU:
case TZ_AMERICA_NEW_YORK:
case TZ_AMERICA_NIPIGON:
case TZ_AMERICA_PANGNIRTUNG:
case TZ_AMERICA_PORT__AU__PRINCE:
case TZ_AMERICA_THUNDER_BAY:
case TZ_AMERICA_TORONTO:
return "EST5EDT,M3.2.0,M11.1.0";
case TZ_AFRICA_ABIDJAN:
case TZ_AFRICA_ACCRA:
case TZ_AFRICA_BAMAKO:
case TZ_AFRICA_BANJUL:
case TZ_AFRICA_BISSAU:
case TZ_AFRICA_CONAKRY:
case TZ_AFRICA_DAKAR:
case TZ_AFRICA_FREETOWN:
case TZ_AFRICA_LOME:
case TZ_AFRICA_MONROVIA:
case TZ_AFRICA_NOUAKCHOTT:
case TZ_AFRICA_OUAGADOUGOU:
case TZ_AFRICA_SAO_TOME:
case TZ_AMERICA_DANMARKSHAVN:
case TZ_ATLANTIC_REYKJAVIK:
case TZ_ATLANTIC_ST_HELENA:
case TZ_ETC_GMT:
case TZ_ETC_GMT0:
case TZ_ETC_GMT_0:
case TZ_ETC_GMT__0:
case TZ_ETC_GREENWICH:
return "GMT0";
case TZ_EUROPE_GUERNSEY:
case TZ_EUROPE_ISLE_OF_MAN:
case TZ_EUROPE_JERSEY:
case TZ_EUROPE_LONDON:
return "GMT0BST,M3.5.0/1,M10.5.0";
case TZ_EUROPE_DUBLIN:
return "GMT0IST,M3.5.0/1,M10.5.0";
case TZ_ASIA_HONG_KONG:
return "HKT-8";
case TZ_PACIFIC_HONOLULU:
return "HST10";
case TZ_AMERICA_ADAK:
return "HST10HDT,M3.2.0,M11.1.0";
case TZ_ASIA_JERUSALEM:
return "IST-2IDT,M3.5.5,M10.5.0";
case TZ_ASIA_KOLKATA:
return "IST-5:30";
case TZ_ASIA_TOKYO:
return "JST-9";
case TZ_ASIA_PYONGYANG:
case TZ_ASIA_SEOUL:
return "KST-9";
case TZ_EUROPE_MOSCOW:
case TZ_EUROPE_SIMFEROPOL:
return "MSK-3";
case TZ_AMERICA_CRESTON:
case TZ_AMERICA_DAWSON:
case TZ_AMERICA_DAWSON_CREEK:
case TZ_AMERICA_FORT_NELSON:
case TZ_AMERICA_HERMOSILLO:
case TZ_AMERICA_MAZATLAN:
case TZ_AMERICA_PHOENIX:
case TZ_AMERICA_WHITEHORSE:
return "MST7";
case TZ_AMERICA_BOISE:
case TZ_AMERICA_CAMBRIDGE_BAY:
case TZ_AMERICA_DENVER:
case TZ_AMERICA_EDMONTON:
case TZ_AMERICA_INUVIK:
case TZ_AMERICA_YELLOWKNIFE:
return "MST7MDT,M3.2.0,M11.1.0";
case TZ_AMERICA_ST_JOHNS:
return "NST3:30NDT,M3.2.0,M11.1.0";
case TZ_ANTARCTICA_MCMURDO:
case TZ_PACIFIC_AUCKLAND:
return "NZST-12NZDT,M9.5.0,M4.1.0/3";
case TZ_ASIA_KARACHI:
return "PKT-5";
case TZ_ASIA_MANILA:
return "PST-8";
case TZ_AMERICA_LOS_ANGELES:
case TZ_AMERICA_TIJUANA:
case TZ_AMERICA_VANCOUVER:
return "PST8PDT,M3.2.0,M11.1.0";
case TZ_AFRICA_JOHANNESBURG:
case TZ_AFRICA_MASERU:
case TZ_AFRICA_MBABANE:
return "SAST-2";
case TZ_PACIFIC_MIDWAY:
case TZ_PACIFIC_PAGO_PAGO:
return "SST11";
case TZ_ETC_UCT:
case TZ_ETC_UNIVERSAL:
case TZ_ETC_UTC:
case TZ_ETC_ZULU:
return "UTC0";
case TZ_AFRICA_BANGUI:
case TZ_AFRICA_BRAZZAVILLE:
case TZ_AFRICA_DOUALA:
case TZ_AFRICA_KINSHASA:
case TZ_AFRICA_LAGOS:
case TZ_AFRICA_LIBREVILLE:
case TZ_AFRICA_LUANDA:
case TZ_AFRICA_MALABO:
case TZ_AFRICA_NDJAMENA:
case TZ_AFRICA_NIAMEY:
case TZ_AFRICA_PORTO__NOVO:
return "WAT-1";
case TZ_ATLANTIC_CANARY:
case TZ_ATLANTIC_FAROE:
case TZ_ATLANTIC_MADEIRA:
case TZ_EUROPE_LISBON:
return "WET0WEST,M3.5.0/1,M10.5.0";
case TZ_ASIA_JAKARTA:
case TZ_ASIA_PONTIANAK:
return "WIB-7";
case TZ_ASIA_JAYAPURA:
return "WIT-9";
case TZ_ASIA_MAKASSAR:
return "WITA-8";
}
#endif
LOG_WARNING(TAG_TIME, F("Timezone %s (%d) not found, using %s"), timezone, sdbm, MYTZ);
return MYTZ;
}
/* ===== Read/Write Configuration ===== */ /* ===== Read/Write Configuration ===== */
#if HASP_USE_CONFIG > 0 #if HASP_USE_CONFIG > 0
bool timeGetConfig(const JsonObject& settings) bool timeGetConfig(const JsonObject& settings)
@ -72,15 +647,16 @@ bool timeGetConfig(const JsonObject& settings)
Preferences preferences; Preferences preferences;
bool changed = false; bool changed = false;
nvs_user_begin(preferences,"time", true); nvs_user_begin(preferences, "time", true);
settings["tz"] = preferences.getString("tz", MYTZ); settings["zone"] = preferences.getString("zone", TIMEZONE);
settings["region"] = preferences.getString("region", "");
settings["ntp"][0] = preferences.getString("ntp1", NTPSERVER1); settings["ntp"][0] = preferences.getString("ntp1", NTPSERVER1);
settings["ntp"][1] = preferences.getString("ntp2", NTPSERVER2); settings["ntp"][1] = preferences.getString("ntp2", NTPSERVER2);
settings["ntp"][2] = preferences.getString("ntp3", NTPSERVER3); settings["ntp"][2] = preferences.getString("ntp3", NTPSERVER3);
preferences.end(); preferences.end();
#if ESP_ARDUINO_VERSION_MAJOR >= 2 #if ESP_ARDUINO_VERSION_MAJOR >= 2
nvs_iterator_t it = nvs_entry_find("nvs", "time", NVS_TYPE_ANY); nvs_iterator_t it = nvs_entry_find("config", "time", NVS_TYPE_ANY);
while(it != NULL) { while(it != NULL) {
nvs_entry_info_t info; nvs_entry_info_t info;
nvs_entry_info(it, &info); nvs_entry_info(it, &info);
@ -97,13 +673,13 @@ bool timeGetConfig(const JsonObject& settings)
bool timeSetConfig(const JsonObject& settings) bool timeSetConfig(const JsonObject& settings)
{ {
Preferences preferences; Preferences preferences;
nvs_user_begin(preferences,"time", false); nvs_user_begin(preferences, "time", false);
configOutput(settings, TAG_TIME); configOutput(settings, TAG_TIME);
bool changed = false; bool changed = false;
char key[16] = "tz"; changed |= nvsUpdateString(preferences, "zone", settings["zone"]);
changed |= nvsUpdateString(preferences, key, settings[key]); changed |= nvsUpdateString(preferences, "region", settings["region"]);
changed |= nvsUpdateString(preferences, "ntp1", settings["ntp"][0]); changed |= nvsUpdateString(preferences, "ntp1", settings["ntp"][0]);
changed |= nvsUpdateString(preferences, "ntp2", settings["ntp"][1]); changed |= nvsUpdateString(preferences, "ntp2", settings["ntp"][1]);
changed |= nvsUpdateString(preferences, "ntp3", settings["ntp"][2]); changed |= nvsUpdateString(preferences, "ntp3", settings["ntp"][2]);

View File

@ -12,6 +12,7 @@ void timeSetup();
/* ===== Special Event Processors ===== */ /* ===== Special Event Processors ===== */
/* ===== Getter and Setter Functions ===== */ /* ===== Getter and Setter Functions ===== */
String time_zone_to_possix(const char* timezone);
/* ===== Read/Write Configuration ===== */ /* ===== Read/Write Configuration ===== */
#if HASP_USE_CONFIG > 0 #if HASP_USE_CONFIG > 0
@ -19,4 +20,486 @@ bool timeGetConfig(const JsonObject& settings);
bool timeSetConfig(const JsonObject& settings); bool timeSetConfig(const JsonObject& settings);
#endif #endif
#ifndef MYTZ
#define MYTZ "EST5EDT,M3.2.0/2,M11.1.0"
#endif
#ifndef TIMEZONE
#define TIMEZONE "Etc/GMT0"
#endif
#ifndef NTPSERVER1
#define NTPSERVER1 "pool.ntp.org"
#endif
#ifndef NTPSERVER2
#define NTPSERVER2 "time.nist.gov"
#endif
#ifndef NTPSERVER3
#define NTPSERVER3 "time.google.com"
#endif
#define TZ_AFRICA_ABIDJAN 59846 // Africa/Abidjan
#define TZ_AFRICA_ACCRA 46363 // Africa/Accra
#define TZ_AFRICA_ADDIS_ABABA 22902 // Africa/Addis_Ababa
#define TZ_AFRICA_ALGIERS 49828 // Africa/Algiers
#define TZ_AFRICA_ASMARA 42538 // Africa/Asmara
#define TZ_AFRICA_BAMAKO 22444 // Africa/Bamako
#define TZ_AFRICA_BANGUI 34785 // Africa/Bangui
#define TZ_AFRICA_BANJUL 46695 // Africa/Banjul
#define TZ_AFRICA_BISSAU 18640 // Africa/Bissau
#define TZ_AFRICA_BLANTYRE 54148 // Africa/Blantyre
#define TZ_AFRICA_BRAZZAVILLE 53101 // Africa/Brazzaville
#define TZ_AFRICA_BUJUMBURA 12380 // Africa/Bujumbura
#define TZ_AFRICA_CAIRO 11955 // Africa/Cairo
#define TZ_AFRICA_CASABLANCA 27318 // Africa/Casablanca
#define TZ_AFRICA_CEUTA 11307 // Africa/Ceuta
#define TZ_AFRICA_CONAKRY 13182 // Africa/Conakry
#define TZ_AFRICA_DAKAR 43146 // Africa/Dakar
#define TZ_AFRICA_DAR_ES_SALAAM 39585 // Africa/Dar_es_Salaam
#define TZ_AFRICA_DJIBOUTI 40623 // Africa/Djibouti
#define TZ_AFRICA_DOUALA 53857 // Africa/Douala
#define TZ_AFRICA_EL_AAIUN 56767 // Africa/El_Aaiun
#define TZ_AFRICA_FREETOWN 50611 // Africa/Freetown
#define TZ_AFRICA_GABORONE 36720 // Africa/Gaborone
#define TZ_AFRICA_HARARE 46224 // Africa/Harare
#define TZ_AFRICA_JOHANNESBURG 27401 // Africa/Johannesburg
#define TZ_AFRICA_JUBA 59967 // Africa/Juba
#define TZ_AFRICA_KAMPALA 38312 // Africa/Kampala
#define TZ_AFRICA_KHARTOUM 15094 // Africa/Khartoum
#define TZ_AFRICA_KIGALI 54954 // Africa/Kigali
#define TZ_AFRICA_KINSHASA 54815 // Africa/Kinshasa
#define TZ_AFRICA_LAGOS 26113 // Africa/Lagos
#define TZ_AFRICA_LIBREVILLE 31439 // Africa/Libreville
#define TZ_AFRICA_LOME 12656 // Africa/Lome
#define TZ_AFRICA_LUANDA 36616 // Africa/Luanda
#define TZ_AFRICA_LUBUMBASHI 45529 // Africa/Lubumbashi
#define TZ_AFRICA_LUSAKA 29858 // Africa/Lusaka
#define TZ_AFRICA_MALABO 45675 // Africa/Malabo
#define TZ_AFRICA_MAPUTO 12265 // Africa/Maputo
#define TZ_AFRICA_MASERU 43422 // Africa/Maseru
#define TZ_AFRICA_MBABANE 62957 // Africa/Mbabane
#define TZ_AFRICA_MOGADISHU 2122 // Africa/Mogadishu
#define TZ_AFRICA_MONROVIA 27130 // Africa/Monrovia
#define TZ_AFRICA_NAIROBI 23877 // Africa/Nairobi
#define TZ_AFRICA_NDJAMENA 24653 // Africa/Ndjamena
#define TZ_AFRICA_NIAMEY 52816 // Africa/Niamey
#define TZ_AFRICA_NOUAKCHOTT 26657 // Africa/Nouakchott
#define TZ_AFRICA_OUAGADOUGOU 4323 // Africa/Ouagadougou
#define TZ_AFRICA_PORTO__NOVO 60078 // Africa/Porto-Novo
#define TZ_AFRICA_SAO_TOME 34246 // Africa/Sao_Tome
#define TZ_AFRICA_TRIPOLI 51826 // Africa/Tripoli
#define TZ_AFRICA_TUNIS 6146 // Africa/Tunis
#define TZ_AFRICA_WINDHOEK 28586 // Africa/Windhoek
#define TZ_AMERICA_ADAK 1518 // America/Adak
#define TZ_AMERICA_ANCHORAGE 28265 // America/Anchorage
#define TZ_AMERICA_ANGUILLA 59956 // America/Anguilla
#define TZ_AMERICA_ANTIGUA 24240 // America/Antigua
#define TZ_AMERICA_ARAGUAINA 53816 // America/Araguaina
#define TZ_AMERICA_ARGENTINA_BUENOS_AIRES 32194 // America/Argentina/Buenos_Aires
#define TZ_AMERICA_ARGENTINA_CATAMARCA 41352 // America/Argentina/Catamarca
#define TZ_AMERICA_ARGENTINA_CORDOBA 62119 // America/Argentina/Cordoba
#define TZ_AMERICA_ARGENTINA_JUJUY 29658 // America/Argentina/Jujuy
#define TZ_AMERICA_ARGENTINA_LA_RIOJA 52686 // America/Argentina/La_Rioja
#define TZ_AMERICA_ARGENTINA_MENDOZA 287 // America/Argentina/Mendoza
#define TZ_AMERICA_ARGENTINA_RIO_GALLEGOS 17200 // America/Argentina/Rio_Gallegos
#define TZ_AMERICA_ARGENTINA_SALTA 39586 // America/Argentina/Salta
#define TZ_AMERICA_ARGENTINA_SAN_JUAN 31552 // America/Argentina/San_Juan
#define TZ_AMERICA_ARGENTINA_SAN_LUIS 7867 // America/Argentina/San_Luis
#define TZ_AMERICA_ARGENTINA_TUCUMAN 15646 // America/Argentina/Tucuman
#define TZ_AMERICA_ARGENTINA_USHUAIA 35845 // America/Argentina/Ushuaia
#define TZ_AMERICA_ARUBA 5186 // America/Aruba
#define TZ_AMERICA_ASUNCION 14577 // America/Asuncion
#define TZ_AMERICA_ATIKOKAN 24575 // America/Atikokan
#define TZ_AMERICA_BAHIA 52928 // America/Bahia
#define TZ_AMERICA_BAHIA_BANDERAS 36403 // America/Bahia_Banderas
#define TZ_AMERICA_BARBADOS 40663 // America/Barbados
#define TZ_AMERICA_BELEM 20176 // America/Belem
#define TZ_AMERICA_BELIZE 42700 // America/Belize
#define TZ_AMERICA_BLANC__SABLON 51769 // America/Blanc-Sablon
#define TZ_AMERICA_BOA_VISTA 62081 // America/Boa_Vista
#define TZ_AMERICA_BOGOTA 42147 // America/Bogota
#define TZ_AMERICA_BOISE 19245 // America/Boise
#define TZ_AMERICA_CAMBRIDGE_BAY 59826 // America/Cambridge_Bay
#define TZ_AMERICA_CAMPO_GRANDE 5419 // America/Campo_Grande
#define TZ_AMERICA_CANCUN 53069 // America/Cancun
#define TZ_AMERICA_CARACAS 50343 // America/Caracas
#define TZ_AMERICA_CAYENNE 20058 // America/Cayenne
#define TZ_AMERICA_CAYMAN 23968 // America/Cayman
#define TZ_AMERICA_CHICAGO 39497 // America/Chicago
#define TZ_AMERICA_CHIHUAHUA 9283 // America/Chihuahua
#define TZ_AMERICA_COSTA_RICA 21857 // America/Costa_Rica
#define TZ_AMERICA_CRESTON 7989 // America/Creston
#define TZ_AMERICA_CUIABA 1002 // America/Cuiaba
#define TZ_AMERICA_CURACAO 23951 // America/Curacao
#define TZ_AMERICA_DANMARKSHAVN 65383 // America/Danmarkshavn
#define TZ_AMERICA_DAWSON 32217 // America/Dawson
#define TZ_AMERICA_DAWSON_CREEK 10326 // America/Dawson_Creek
#define TZ_AMERICA_DENVER 53047 // America/Denver
#define TZ_AMERICA_DETROIT 36570 // America/Detroit
#define TZ_AMERICA_DOMINICA 42081 // America/Dominica
#define TZ_AMERICA_EDMONTON 65063 // America/Edmonton
#define TZ_AMERICA_EIRUNEPE 56980 // America/Eirunepe
#define TZ_AMERICA_EL_SALVADOR 50933 // America/El_Salvador
#define TZ_AMERICA_FORTALEZA 35541 // America/Fortaleza
#define TZ_AMERICA_FORT_NELSON 7728 // America/Fort_Nelson
#define TZ_AMERICA_GLACE_BAY 38296 // America/Glace_Bay
#define TZ_AMERICA_GODTHAB 27056 // America/Godthab
#define TZ_AMERICA_GOOSE_BAY 51667 // America/Goose_Bay
#define TZ_AMERICA_GRAND_TURK 1262 // America/Grand_Turk
#define TZ_AMERICA_GRENADA 39977 // America/Grenada
#define TZ_AMERICA_GUADELOUPE 3572 // America/Guadeloupe
#define TZ_AMERICA_GUATEMALA 43020 // America/Guatemala
#define TZ_AMERICA_GUAYAQUIL 35489 // America/Guayaquil
#define TZ_AMERICA_GUYANA 38858 // America/Guyana
#define TZ_AMERICA_HALIFAX 59302 // America/Halifax
#define TZ_AMERICA_HAVANA 6840 // America/Havana
#define TZ_AMERICA_HERMOSILLO 5347 // America/Hermosillo
#define TZ_AMERICA_INDIANA_INDIANAPOLIS 22259 // America/Indiana/Indianapolis
#define TZ_AMERICA_INDIANA_KNOX 13714 // America/Indiana/Knox
#define TZ_AMERICA_INDIANA_MARENGO 59081 // America/Indiana/Marengo
#define TZ_AMERICA_INDIANA_PETERSBURG 46069 // America/Indiana/Petersburg
#define TZ_AMERICA_INDIANA_TELL_CITY 2291 // America/Indiana/Tell_City
#define TZ_AMERICA_INDIANA_VEVAY 21657 // America/Indiana/Vevay
#define TZ_AMERICA_INDIANA_VINCENNES 14789 // America/Indiana/Vincennes
#define TZ_AMERICA_INDIANA_WINAMAC 29124 // America/Indiana/Winamac
#define TZ_AMERICA_INUVIK 49833 // America/Inuvik
#define TZ_AMERICA_IQALUIT 12748 // America/Iqaluit
#define TZ_AMERICA_JAMAICA 52379 // America/Jamaica
#define TZ_AMERICA_JUNEAU 65079 // America/Juneau
#define TZ_AMERICA_KENTUCKY_LOUISVILLE 31752 // America/Kentucky/Louisville
#define TZ_AMERICA_KENTUCKY_MONTICELLO 34078 // America/Kentucky/Monticello
#define TZ_AMERICA_KRALENDIJK 23362 // America/Kralendijk
#define TZ_AMERICA_LA_PAZ 50176 // America/La_Paz
#define TZ_AMERICA_LIMA 20114 // America/Lima
#define TZ_AMERICA_LOS_ANGELES 36703 // America/Los_Angeles
#define TZ_AMERICA_LOWER_PRINCES 29931 // America/Lower_Princes
#define TZ_AMERICA_MACEIO 49053 // America/Maceio
#define TZ_AMERICA_MANAGUA 56459 // America/Managua
#define TZ_AMERICA_MANAUS 31942 // America/Manaus
#define TZ_AMERICA_MARIGOT 56608 // America/Marigot
#define TZ_AMERICA_MARTINIQUE 39636 // America/Martinique
#define TZ_AMERICA_MATAMOROS 22258 // America/Matamoros
#define TZ_AMERICA_MAZATLAN 58305 // America/Mazatlan
#define TZ_AMERICA_MENOMINEE 45912 // America/Menominee
#define TZ_AMERICA_MERIDA 45965 // America/Merida
#define TZ_AMERICA_METLAKATLA 419 // America/Metlakatla
#define TZ_AMERICA_MEXICO_CITY 59348 // America/Mexico_City
#define TZ_AMERICA_MIQUELON 8423 // America/Miquelon
#define TZ_AMERICA_MONCTON 38811 // America/Moncton
#define TZ_AMERICA_MONTERREY 10192 // America/Monterrey
#define TZ_AMERICA_MONTEVIDEO 56703 // America/Montevideo
#define TZ_AMERICA_MONTREAL 24295 // America/Montreal
#define TZ_AMERICA_MONTSERRAT 3758 // America/Montserrat
#define TZ_AMERICA_NASSAU 1000 // America/Nassau
#define TZ_AMERICA_NEW_YORK 46127 // America/New_York
#define TZ_AMERICA_NIPIGON 6033 // America/Nipigon
#define TZ_AMERICA_NOME 19738 // America/Nome
#define TZ_AMERICA_NORONHA 27720 // America/Noronha
#define TZ_AMERICA_NORTH_DAKOTA_BEULAH 39271 // America/North_Dakota/Beulah
#define TZ_AMERICA_NORTH_DAKOTA_CENTER 49787 // America/North_Dakota/Center
#define TZ_AMERICA_NORTH_DAKOTA_NEW_SALEM 38209 // America/North_Dakota/New_Salem
#define TZ_AMERICA_NUUK 44062 // America/Nuuk
#define TZ_AMERICA_OJINAGA 33530 // America/Ojinaga
#define TZ_AMERICA_PANAMA 40569 // America/Panama
#define TZ_AMERICA_PANGNIRTUNG 4646 // America/Pangnirtung
#define TZ_AMERICA_PARAMARIBO 46585 // America/Paramaribo
#define TZ_AMERICA_PHOENIX 23662 // America/Phoenix
#define TZ_AMERICA_PORT__AU__PRINCE 25047 // America/Port-au-Prince
#define TZ_AMERICA_PORT_OF_SPAIN 63934 // America/Port_of_Spain
#define TZ_AMERICA_PORTO_VELHO 34354 // America/Porto_Velho
#define TZ_AMERICA_PUERTO_RICO 42868 // America/Puerto_Rico
#define TZ_AMERICA_PUNTA_ARENAS 37782 // America/Punta_Arenas
#define TZ_AMERICA_RAINY_RIVER 23441 // America/Rainy_River
#define TZ_AMERICA_RANKIN_INLET 41897 // America/Rankin_Inlet
#define TZ_AMERICA_RECIFE 24345 // America/Recife
#define TZ_AMERICA_REGINA 41993 // America/Regina
#define TZ_AMERICA_RESOLUTE 43530 // America/Resolute
#define TZ_AMERICA_RIO_BRANCO 51889 // America/Rio_Branco
#define TZ_AMERICA_SANTAREM 27694 // America/Santarem
#define TZ_AMERICA_SANTIAGO 60181 // America/Santiago
#define TZ_AMERICA_SANTO_DOMINGO 59690 // America/Santo_Domingo
#define TZ_AMERICA_SAO_PAULO 16456 // America/Sao_Paulo
#define TZ_AMERICA_SCORESBYSUND 23665 // America/Scoresbysund
#define TZ_AMERICA_SITKA 24147 // America/Sitka
#define TZ_AMERICA_ST_BARTHELEMY 5888 // America/St_Barthelemy
#define TZ_AMERICA_ST_JOHNS 34987 // America/St_Johns
#define TZ_AMERICA_ST_KITTS 48824 // America/St_Kitts
#define TZ_AMERICA_ST_LUCIA 56405 // America/St_Lucia
#define TZ_AMERICA_ST_THOMAS 30529 // America/St_Thomas
#define TZ_AMERICA_ST_VINCENT 19974 // America/St_Vincent
#define TZ_AMERICA_SWIFT_CURRENT 39308 // America/Swift_Current
#define TZ_AMERICA_TEGUCIGALPA 31165 // America/Tegucigalpa
#define TZ_AMERICA_THULE 64601 // America/Thule
#define TZ_AMERICA_THUNDER_BAY 34494 // America/Thunder_Bay
#define TZ_AMERICA_TIJUANA 57395 // America/Tijuana
#define TZ_AMERICA_TORONTO 1616 // America/Toronto
#define TZ_AMERICA_TORTOLA 10118 // America/Tortola
#define TZ_AMERICA_VANCOUVER 3708 // America/Vancouver
#define TZ_AMERICA_WHITEHORSE 22549 // America/Whitehorse
#define TZ_AMERICA_WINNIPEG 54300 // America/Winnipeg
#define TZ_AMERICA_YAKUTAT 308 // America/Yakutat
#define TZ_AMERICA_YELLOWKNIFE 22480 // America/Yellowknife
#define TZ_ANTARCTICA_CASEY 37368 // Antarctica/Casey
#define TZ_ANTARCTICA_DAVIS 8306 // Antarctica/Davis
#define TZ_ANTARCTICA_DUMONTDURVILLE 25979 // Antarctica/DumontDUrville
#define TZ_ANTARCTICA_MACQUARIE 19183 // Antarctica/Macquarie
#define TZ_ANTARCTICA_MAWSON 53888 // Antarctica/Mawson
#define TZ_ANTARCTICA_MCMURDO 42990 // Antarctica/McMurdo
#define TZ_ANTARCTICA_PALMER 40592 // Antarctica/Palmer
#define TZ_ANTARCTICA_ROTHERA 6290 // Antarctica/Rothera
#define TZ_ANTARCTICA_SYOWA 55874 // Antarctica/Syowa
#define TZ_ANTARCTICA_TROLL 33120 // Antarctica/Troll
#define TZ_ANTARCTICA_VOSTOK 15431 // Antarctica/Vostok
#define TZ_ARCTIC_LONGYEARBYEN 25388 // Arctic/Longyearbyen
#define TZ_ASIA_ADEN 13361 // Asia/Aden
#define TZ_ASIA_ALMATY 64809 // Asia/Almaty
#define TZ_ASIA_AMMAN 43017 // Asia/Amman
#define TZ_ASIA_ANADYR 8686 // Asia/Anadyr
#define TZ_ASIA_AQTAU 22419 // Asia/Aqtau
#define TZ_ASIA_AQTOBE 25075 // Asia/Aqtobe
#define TZ_ASIA_ASHGABAT 1930 // Asia/Ashgabat
#define TZ_ASIA_ATYRAU 49413 // Asia/Atyrau
#define TZ_ASIA_BAGHDAD 35714 // Asia/Baghdad
#define TZ_ASIA_BAHRAIN 58744 // Asia/Bahrain
#define TZ_ASIA_BAKU 55278 // Asia/Baku
#define TZ_ASIA_BANGKOK 50122 // Asia/Bangkok
#define TZ_ASIA_BARNAUL 23416 // Asia/Barnaul
#define TZ_ASIA_BEIRUT 35376 // Asia/Beirut
#define TZ_ASIA_BISHKEK 30480 // Asia/Bishkek
#define TZ_ASIA_BRUNEI 58418 // Asia/Brunei
#define TZ_ASIA_CHITA 6380 // Asia/Chita
#define TZ_ASIA_CHOIBALSAN 63863 // Asia/Choibalsan
#define TZ_ASIA_COLOMBO 59270 // Asia/Colombo
#define TZ_ASIA_DAMASCUS 50628 // Asia/Damascus
#define TZ_ASIA_DHAKA 63918 // Asia/Dhaka
#define TZ_ASIA_DILI 62887 // Asia/Dili
#define TZ_ASIA_DUBAI 41076 // Asia/Dubai
#define TZ_ASIA_DUSHANBE 16571 // Asia/Dushanbe
#define TZ_ASIA_FAMAGUSTA 16958 // Asia/Famagusta
#define TZ_ASIA_GAZA 61254 // Asia/Gaza
#define TZ_ASIA_HEBRON 6897 // Asia/Hebron
#define TZ_ASIA_HO_CHI_MINH 4836 // Asia/Ho_Chi_Minh
#define TZ_ASIA_HONG_KONG 19895 // Asia/Hong_Kong
#define TZ_ASIA_HOVD 38938 // Asia/Hovd
#define TZ_ASIA_IRKUTSK 39028 // Asia/Irkutsk
#define TZ_ASIA_JAKARTA 41997 // Asia/Jakarta
#define TZ_ASIA_JAYAPURA 9016 // Asia/Jayapura
#define TZ_ASIA_JERUSALEM 63395 // Asia/Jerusalem
#define TZ_ASIA_KABUL 61310 // Asia/Kabul
#define TZ_ASIA_KAMCHATKA 55328 // Asia/Kamchatka
#define TZ_ASIA_KARACHI 16410 // Asia/Karachi
#define TZ_ASIA_KATHMANDU 49212 // Asia/Kathmandu
#define TZ_ASIA_KHANDYGA 33278 // Asia/Khandyga
#define TZ_ASIA_KOLKATA 25318 // Asia/Kolkata
#define TZ_ASIA_KRASNOYARSK 41603 // Asia/Krasnoyarsk
#define TZ_ASIA_KUALA_LUMPUR 33409 // Asia/Kuala_Lumpur
#define TZ_ASIA_KUCHING 23470 // Asia/Kuching
#define TZ_ASIA_KUWAIT 17764 // Asia/Kuwait
#define TZ_ASIA_MACAU 47134 // Asia/Macau
#define TZ_ASIA_MAGADAN 5598 // Asia/Magadan
#define TZ_ASIA_MAKASSAR 13856 // Asia/Makassar
#define TZ_ASIA_MANILA 49609 // Asia/Manila
#define TZ_ASIA_MUSCAT 57840 // Asia/Muscat
#define TZ_ASIA_NICOSIA 59199 // Asia/Nicosia
#define TZ_ASIA_NOVOKUZNETSK 29540 // Asia/Novokuznetsk
#define TZ_ASIA_NOVOSIBIRSK 61774 // Asia/Novosibirsk
#define TZ_ASIA_OMSK 11675 // Asia/Omsk
#define TZ_ASIA_ORAL 30387 // Asia/Oral
#define TZ_ASIA_PHNOM_PENH 39103 // Asia/Phnom_Penh
#define TZ_ASIA_PONTIANAK 43478 // Asia/Pontianak
#define TZ_ASIA_PYONGYANG 20443 // Asia/Pyongyang
#define TZ_ASIA_QATAR 15280 // Asia/Qatar
#define TZ_ASIA_QYZYLORDA 13248 // Asia/Qyzylorda
#define TZ_ASIA_RIYADH 6728 // Asia/Riyadh
#define TZ_ASIA_SAKHALIN 57760 // Asia/Sakhalin
#define TZ_ASIA_SAMARKAND 48471 // Asia/Samarkand
#define TZ_ASIA_SEOUL 62479 // Asia/Seoul
#define TZ_ASIA_SHANGHAI 31024 // Asia/Shanghai
#define TZ_ASIA_SINGAPORE 8191 // Asia/Singapore
#define TZ_ASIA_SREDNEKOLYMSK 34938 // Asia/Srednekolymsk
#define TZ_ASIA_TAIPEI 49565 // Asia/Taipei
#define TZ_ASIA_TASHKENT 22919 // Asia/Tashkent
#define TZ_ASIA_TBILISI 1225 // Asia/Tbilisi
#define TZ_ASIA_TEHRAN 35565 // Asia/Tehran
#define TZ_ASIA_THIMPHU 34528 // Asia/Thimphu
#define TZ_ASIA_TOKYO 15745 // Asia/Tokyo
#define TZ_ASIA_TOMSK 23301 // Asia/Tomsk
#define TZ_ASIA_ULAANBAATAR 57077 // Asia/Ulaanbaatar
#define TZ_ASIA_URUMQI 3922 // Asia/Urumqi
#define TZ_ASIA_UST__NERA 49026 // Asia/Ust-Nera
#define TZ_ASIA_VIENTIANE 7682 // Asia/Vientiane
#define TZ_ASIA_VLADIVOSTOK 38145 // Asia/Vladivostok
#define TZ_ASIA_YAKUTSK 2901 // Asia/Yakutsk
#define TZ_ASIA_YANGON 12933 // Asia/Yangon
#define TZ_ASIA_YEKATERINBURG 30663 // Asia/Yekaterinburg
#define TZ_ASIA_YEREVAN 14335 // Asia/Yerevan
#define TZ_ATLANTIC_AZORES 38417 // Atlantic/Azores
#define TZ_ATLANTIC_BERMUDA 57485 // Atlantic/Bermuda
#define TZ_ATLANTIC_CANARY 15455 // Atlantic/Canary
#define TZ_ATLANTIC_CAPE_VERDE 41471 // Atlantic/Cape_Verde
#define TZ_ATLANTIC_FAROE 51462 // Atlantic/Faroe
#define TZ_ATLANTIC_MADEIRA 11388 // Atlantic/Madeira
#define TZ_ATLANTIC_REYKJAVIK 58805 // Atlantic/Reykjavik
#define TZ_ATLANTIC_SOUTH_GEORGIA 61829 // Atlantic/South_Georgia
#define TZ_ATLANTIC_STANLEY 24651 // Atlantic/Stanley
#define TZ_ATLANTIC_ST_HELENA 51168 // Atlantic/St_Helena
#define TZ_AUSTRALIA_ADELAIDE 53986 // Australia/Adelaide
#define TZ_AUSTRALIA_BRISBANE 1247 // Australia/Brisbane
#define TZ_AUSTRALIA_BROKEN_HILL 52284 // Australia/Broken_Hill
#define TZ_AUSTRALIA_CURRIE 58525 // Australia/Currie
#define TZ_AUSTRALIA_DARWIN 10070 // Australia/Darwin
#define TZ_AUSTRALIA_EUCLA 25017 // Australia/Eucla
#define TZ_AUSTRALIA_HOBART 32663 // Australia/Hobart
#define TZ_AUSTRALIA_LINDEMAN 4631 // Australia/Lindeman
#define TZ_AUSTRALIA_LORD_HOWE 58896 // Australia/Lord_Howe
#define TZ_AUSTRALIA_MELBOURNE 3878 // Australia/Melbourne
#define TZ_AUSTRALIA_PERTH 21858 // Australia/Perth
#define TZ_AUSTRALIA_SYDNEY 52019 // Australia/Sydney
#define TZ_EUROPE_AMSTERDAM 12329 // Europe/Amsterdam
#define TZ_EUROPE_ANDORRA 64604 // Europe/Andorra
#define TZ_EUROPE_ASTRAKHAN 37742 // Europe/Astrakhan
#define TZ_EUROPE_ATHENS 13890 // Europe/Athens
#define TZ_EUROPE_BELGRADE 30043 // Europe/Belgrade
#define TZ_EUROPE_BERLIN 39215 // Europe/Berlin
#define TZ_EUROPE_BRATISLAVA 16250 // Europe/Bratislava
#define TZ_EUROPE_BRUSSELS 33268 // Europe/Brussels
#define TZ_EUROPE_BUCHAREST 40208 // Europe/Bucharest
#define TZ_EUROPE_BUDAPEST 47539 // Europe/Budapest
#define TZ_EUROPE_BUSINGEN 56952 // Europe/Busingen
#define TZ_EUROPE_CHISINAU 46357 // Europe/Chisinau
#define TZ_EUROPE_COPENHAGEN 27191 // Europe/Copenhagen
#define TZ_EUROPE_DUBLIN 16333 // Europe/Dublin
#define TZ_EUROPE_GIBRALTAR 56251 // Europe/Gibraltar
#define TZ_EUROPE_GUERNSEY 5857 // Europe/Guernsey
#define TZ_EUROPE_HELSINKI 34932 // Europe/Helsinki
#define TZ_EUROPE_ISLE_OF_MAN 33537 // Europe/Isle_of_Man
#define TZ_EUROPE_ISTANBUL 64847 // Europe/Istanbul
#define TZ_EUROPE_JERSEY 3773 // Europe/Jersey
#define TZ_EUROPE_KALININGRAD 47649 // Europe/Kaliningrad
#define TZ_EUROPE_KIEV 25980 // Europe/Kiev
#define TZ_EUROPE_KIROV 49614 // Europe/Kirov
#define TZ_EUROPE_LISBON 6360 // Europe/Lisbon
#define TZ_EUROPE_LJUBLJANA 13118 // Europe/Ljubljana
#define TZ_EUROPE_LONDON 24101 // Europe/London
#define TZ_EUROPE_LUXEMBOURG 60371 // Europe/Luxembourg
#define TZ_EUROPE_MADRID 15722 // Europe/Madrid
#define TZ_EUROPE_MALTA 40440 // Europe/Malta
#define TZ_EUROPE_MARIEHAMN 21511 // Europe/Mariehamn
#define TZ_EUROPE_MINSK 17085 // Europe/Minsk
#define TZ_EUROPE_MONACO 36334 // Europe/Monaco
#define TZ_EUROPE_MOSCOW 50087 // Europe/Moscow
#define TZ_EUROPE_OSLO 17716 // Europe/Oslo
#define TZ_EUROPE_PARIS 5470 // Europe/Paris
#define TZ_EUROPE_PODGORICA 53237 // Europe/Podgorica
#define TZ_EUROPE_PRAGUE 38501 // Europe/Prague
#define TZ_EUROPE_RIGA 6942 // Europe/Riga
#define TZ_EUROPE_ROME 31138 // Europe/Rome
#define TZ_EUROPE_SAMARA 54846 // Europe/Samara
#define TZ_EUROPE_SAN_MARINO 13112 // Europe/San_Marino
#define TZ_EUROPE_SARAJEVO 21246 // Europe/Sarajevo
#define TZ_EUROPE_SARATOV 46897 // Europe/Saratov
#define TZ_EUROPE_SIMFEROPOL 13991 // Europe/Simferopol
#define TZ_EUROPE_SKOPJE 5217 // Europe/Skopje
#define TZ_EUROPE_SOFIA 58037 // Europe/Sofia
#define TZ_EUROPE_STOCKHOLM 63761 // Europe/Stockholm
#define TZ_EUROPE_TALLINN 47375 // Europe/Tallinn
#define TZ_EUROPE_TIRANE 16968 // Europe/Tirane
#define TZ_EUROPE_ULYANOVSK 46625 // Europe/Ulyanovsk
#define TZ_EUROPE_UZHGOROD 18985 // Europe/Uzhgorod
#define TZ_EUROPE_VADUZ 31057 // Europe/Vaduz
#define TZ_EUROPE_VATICAN 48035 // Europe/Vatican
#define TZ_EUROPE_VIENNA 13468 // Europe/Vienna
#define TZ_EUROPE_VILNIUS 17221 // Europe/Vilnius
#define TZ_EUROPE_VOLGOGRAD 19164 // Europe/Volgograd
#define TZ_EUROPE_WARSAW 33262 // Europe/Warsaw
#define TZ_EUROPE_ZAGREB 40668 // Europe/Zagreb
#define TZ_EUROPE_ZAPOROZHYE 24554 // Europe/Zaporozhye
#define TZ_EUROPE_ZURICH 30500 // Europe/Zurich
#define TZ_INDIAN_ANTANANARIVO 43624 // Indian/Antananarivo
#define TZ_INDIAN_CHAGOS 45735 // Indian/Chagos
#define TZ_INDIAN_CHRISTMAS 37546 // Indian/Christmas
#define TZ_INDIAN_COCOS 22275 // Indian/Cocos
#define TZ_INDIAN_COMORO 37219 // Indian/Comoro
#define TZ_INDIAN_KERGUELEN 7998 // Indian/Kerguelen
#define TZ_INDIAN_MAHE 21769 // Indian/Mahe
#define TZ_INDIAN_MALDIVES 44831 // Indian/Maldives
#define TZ_INDIAN_MAURITIUS 27155 // Indian/Mauritius
#define TZ_INDIAN_MAYOTTE 23459 // Indian/Mayotte
#define TZ_INDIAN_REUNION 37028 // Indian/Reunion
#define TZ_PACIFIC_APIA 51917 // Pacific/Apia
#define TZ_PACIFIC_AUCKLAND 205 // Pacific/Auckland
#define TZ_PACIFIC_BOUGAINVILLE 18577 // Pacific/Bougainville
#define TZ_PACIFIC_CHATHAM 40150 // Pacific/Chatham
#define TZ_PACIFIC_CHUUK 57312 // Pacific/Chuuk
#define TZ_PACIFIC_EASTER 36752 // Pacific/Easter
#define TZ_PACIFIC_EFATE 50699 // Pacific/Efate
#define TZ_PACIFIC_ENDERBURY 28796 // Pacific/Enderbury
#define TZ_PACIFIC_FAKAOFO 25921 // Pacific/Fakaofo
#define TZ_PACIFIC_FIJI 29256 // Pacific/Fiji
#define TZ_PACIFIC_FUNAFUTI 17484 // Pacific/Funafuti
#define TZ_PACIFIC_GALAPAGOS 27717 // Pacific/Galapagos
#define TZ_PACIFIC_GAMBIER 34113 // Pacific/Gambier
#define TZ_PACIFIC_GUADALCANAL 51801 // Pacific/Guadalcanal
#define TZ_PACIFIC_GUAM 64224 // Pacific/Guam
#define TZ_PACIFIC_HONOLULU 9568 // Pacific/Honolulu
#define TZ_PACIFIC_KIRITIMATI 50585 // Pacific/Kiritimati
#define TZ_PACIFIC_KOSRAE 59661 // Pacific/Kosrae
#define TZ_PACIFIC_KWAJALEIN 7428 // Pacific/Kwajalein
#define TZ_PACIFIC_MAJURO 21890 // Pacific/Majuro
#define TZ_PACIFIC_MARQUESAS 24540 // Pacific/Marquesas
#define TZ_PACIFIC_MIDWAY 33773 // Pacific/Midway
#define TZ_PACIFIC_NAURU 16127 // Pacific/Nauru
#define TZ_PACIFIC_NIUE 64241 // Pacific/Niue
#define TZ_PACIFIC_NORFOLK 55539 // Pacific/Norfolk
#define TZ_PACIFIC_NOUMEA 25019 // Pacific/Noumea
#define TZ_PACIFIC_PAGO_PAGO 20569 // Pacific/Pago_Pago
#define TZ_PACIFIC_PALAU 27977 // Pacific/Palau
#define TZ_PACIFIC_PITCAIRN 16114 // Pacific/Pitcairn
#define TZ_PACIFIC_POHNPEI 37801 // Pacific/Pohnpei
#define TZ_PACIFIC_PORT_MORESBY 4413 // Pacific/Port_Moresby
#define TZ_PACIFIC_RAROTONGA 53179 // Pacific/Rarotonga
#define TZ_PACIFIC_SAIPAN 31368 // Pacific/Saipan
#define TZ_PACIFIC_TAHITI 41769 // Pacific/Tahiti
#define TZ_PACIFIC_TARAWA 20300 // Pacific/Tarawa
#define TZ_PACIFIC_TONGATAPU 32665 // Pacific/Tongatapu
#define TZ_PACIFIC_WAKE 54058 // Pacific/Wake
#define TZ_PACIFIC_WALLIS 13754 // Pacific/Wallis
#define TZ_ETC_GMT 37395 // Etc/GMT
#define TZ_ETC_GMT__0 50134 // Etc/GMT-0
#define TZ_ETC_GMT__1 50135 // Etc/GMT-1
#define TZ_ETC_GMT__2 50136 // Etc/GMT-2
#define TZ_ETC_GMT__3 50137 // Etc/GMT-3
#define TZ_ETC_GMT__4 50138 // Etc/GMT-4
#define TZ_ETC_GMT__5 50139 // Etc/GMT-5
#define TZ_ETC_GMT__6 50140 // Etc/GMT-6
#define TZ_ETC_GMT__7 50141 // Etc/GMT-7
#define TZ_ETC_GMT__8 50142 // Etc/GMT-8
#define TZ_ETC_GMT__9 50143 // Etc/GMT-9
#define TZ_ETC_GMT__10 12825 // Etc/GMT-10
#define TZ_ETC_GMT__11 12826 // Etc/GMT-11
#define TZ_ETC_GMT__12 12827 // Etc/GMT-12
#define TZ_ETC_GMT__13 12828 // Etc/GMT-13
#define TZ_ETC_GMT__14 12829 // Etc/GMT-14
#define TZ_ETC_GMT_0 62173 // Etc/GMT0
#define TZ_ETC_GMT0 50008 // Etc/GMT+0
#define TZ_ETC_GMT1 50009 // Etc/GMT+1
#define TZ_ETC_GMT2 50010 // Etc/GMT+2
#define TZ_ETC_GMT3 50011 // Etc/GMT+3
#define TZ_ETC_GMT4 50012 // Etc/GMT+4
#define TZ_ETC_GMT5 50013 // Etc/GMT+5
#define TZ_ETC_GMT6 50014 // Etc/GMT+6
#define TZ_ETC_GMT7 50015 // Etc/GMT+7
#define TZ_ETC_GMT8 50016 // Etc/GMT+8
#define TZ_ETC_GMT9 50017 // Etc/GMT+9
#define TZ_ETC_GMT10 4887 // Etc/GMT+10
#define TZ_ETC_GMT11 4888 // Etc/GMT+11
#define TZ_ETC_GMT12 4889 // Etc/GMT+12
#define TZ_ETC_UCT 26795 // Etc/UCT
#define TZ_ETC_UTC 27849 // Etc/UTC
#define TZ_ETC_GREENWICH 29311 // Etc/Greenwich
#define TZ_ETC_UNIVERSAL 28304 // Etc/Universal
#define TZ_ETC_ZULU 60255 // Etc/Zulu
#endif #endif