neptune2 / simpleDSTadjust

OBSOLETE: esp8266 Arduino base code NTP, TimeZone and DST are now fixed
https://github.com/esp8266/Arduino/blob/master/libraries/esp8266/examples/NTP-TZ-DST/
21 stars 19 forks source link

OBSOLETE:

See https://github.com/esp8266/Arduino/blob/master/libraries/esp8266/examples/NTP-TZ-DST/

simpleDSTadjust

ESP8266 Automatic Daylight Saving Time (DST) adjust library.

This library implements missing DST functionality by implementing a wrapper API to the built-in time() function. It uses simple rules to define the start and end of DST. Rules work for most contries that observe DST.

Caution: DST rules may change in the future if you hardcode the rules.

Portions of code adapted from:

Quick Start

Installing

You can install by using the Arduino Library manager and searching for simpleDSTadjust or by downloading the contents of the library as a .zip file and using the Arduino Library Manager to add the .zip file.

Examples

ntpTimedemo_DST

An example is included with the library that shows how to use the built-in LWIP sntp client to get the time from an NTP server and adjust for daylight saving time. This example shows how to write out the time in a 12 hour format, which could be easily adapted for a 24 hour format. It includes rules for US/Eastern (New York) and Australia/Eastern (Sydney) timezones which can be changes to other other country/city timezones. It also shows how to implement a timer to update the NTP time with an interval greater than 2 hours.

Squix78 Weather Station Example

See the WeatherStationDemoExtendedDST example for a full implementation including selectable locales, 12/24 hour clock formats and more.

Library Usage

Include the library in your sketch

#include <simpleDSTadjust.h>

Define the DST rules that you want

//US Eastern Time Zone (New York, Boston)
struct dstRule StartRule = {"EDT", Second, Sun, Mar, 2, 3600};    // Daylight time = UTC/GMT -4 hours
struct dstRule EndRule = {"EST", First, Sun, Nov, 2, 0};          // Standard time = UTC/GMT -5 hour

Intialize a global instance of the library

// Setup simpleDSTadjust Library rules
simpleDSTadjust dstAdjusted(StartRule, EndRule);

In your code replace your call to time() with the simpleDSTadjust class version of the function.

Minimal version:

time_t t = dstAdjusted.time(NULL);

Version to get the DST adjusted timezone abbreviation

char *dstAbbrev;
time_t t = dstAdjusted.time(&dstAbbrev);

Documentation

Methods

simpleDSTadjust constructor

simpleDSTadjust(struct dstRule startRule, struct dstRule endRule )

initializes the class with the dstRules.

time

time_t time(char **abbrev)

Returns the DST adjusted time in seconds since Jan 1 1970. This is the same functionality as the built-in time() function. However the simpleDSTadjust class version of time() has a char pointer argument instead of a time_t pointer. This is intended for obtaining the timezone abbreviation string. If the argument passed is NULL, there is no difference in functionality other than the DST adjustment.