]> git.earman.xyz Git - sensor-watch.git/commitdiff
sunrise sunset fix during DST
authorDavid Volovskiy <devolov@gmail.com>
Sun, 8 Sep 2024 14:37:36 +0000 (10:37 -0400)
committerDavid Volovskiy <devolov@gmail.com>
Sun, 8 Sep 2024 22:18:00 +0000 (18:18 -0400)
movement/watch_faces/complication/sunrise_sunset_face.c
movement/watch_faces/complication/sunrise_sunset_face.h

index a436776a5d468e315eece28290163ff9f4a3f734..4c77fe587718026dcd137755b9b12a3542a206ba 100644 (file)
@@ -50,15 +50,16 @@ static void _sunrise_sunset_face_update(movement_settings_t *settings, sunrise_s
     bool show_next_match = false;
     movement_location_t movement_location;
     int16_t tz;
+    watch_date_time date_time = watch_rtc_get_date_time(); // the current local date / time
     if (state->longLatToUse == 0 || _location_count <= 1) {
+        tz = get_timezone_offset(settings->bit.time_zone, date_time);
         movement_location = (movement_location_t) watch_get_backup_data(1);
-        tz = movement_timezone_offsets[settings->bit.time_zone];
     }
     else{
         movement_location.bit.latitude = longLatPresets[state->longLatToUse].latitude;
         movement_location.bit.longitude = longLatPresets[state->longLatToUse].longitude;
-        if (longLatPresets[state->longLatToUse].timezone == SUNRISE_USE_LOCAL_TZ)
-            tz = movement_timezone_offsets[settings->bit.time_zone];
+        if (longLatPresets[state->longLatToUse].uses_dst && dst_occurring(date_time))
+            tz = movement_timezone_dst_offsets[longLatPresets[state->longLatToUse].timezone];
         else
             tz = movement_timezone_offsets[longLatPresets[state->longLatToUse].timezone];
     }
@@ -70,7 +71,6 @@ static void _sunrise_sunset_face_update(movement_settings_t *settings, sunrise_s
         return;
     }
 
-    watch_date_time date_time = watch_rtc_get_date_time(); // the current local date / time
     watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, tz * 60, 0); // the current date / time in UTC
     watch_date_time scratch_time; // scratchpad, contains different values at different times
     scratch_time.reg = utc_now.reg;
@@ -343,7 +343,6 @@ void sunrise_sunset_face_activate(movement_settings_t *settings, void *context)
     movement_location_t movement_location = (movement_location_t) watch_get_backup_data(1);
     state->working_latitude = _sunrise_sunset_face_struct_from_latlon(movement_location.bit.latitude);
     state->working_longitude = _sunrise_sunset_face_struct_from_latlon(movement_location.bit.longitude);
-    state->tz = get_timezone_offset(settings->bit.time_zone, watch_rtc_get_date_time());
 }
 
 bool sunrise_sunset_face_loop(movement_event_t event, movement_settings_t *settings, void *context) {
index 537fc5146a9aa381b359bc0146b01060b67a94c4..d100dd467152d6ad3361351cd943d078a8f68527 100644 (file)
@@ -52,7 +52,6 @@ typedef struct {
     uint8_t rise_index;
     uint8_t active_digit;
     bool location_changed;
-    int16_t tz;
     watch_date_time rise_set_expires;
     sunrise_sunset_lat_lon_settings_t working_latitude;
     sunrise_sunset_lat_lon_settings_t working_longitude;
@@ -78,15 +77,18 @@ typedef struct {
     char name[2];
     int16_t latitude;
     int16_t longitude;
-    uint8_t timezone;  // References element in movement_timezone_offsets; Set to 0xFF to use local timezone
+    uint8_t timezone;  // References element in movement_timezone_offsets
+    bool uses_dst;
 } long_lat_presets_t;
 
 // Locations must either use the same timezone as local time, or not observe DST.
 static const long_lat_presets_t longLatPresets[] =
 {
     { .name = "  "},  // Default, the long, lat, and timezone get replaced by what's set in the watch
-//    { .name = "dE", .latitude = 4221, .longitude = -8305, .timezone = SUNRISE_USE_LOCAL_TZ },  // Detroit, MI; Assumes you live in the Eastern Timezone
-//    { .name = "To", .latitude = 3567, .longitude = 13965, .timezone = 15 },  // Tokyo, JP
+//    { .name = "Ny", .latitude = 4072, .longitude = -7401, .timezone = 33, .uses_dst = true },  // New York City, NY
+//    { .name = "LA", .latitude = 3405, .longitude = -11824, .timezone = 30, .uses_dst = true },  // Los Angeles, CA
+//    { .name = "dE", .latitude = 4221, .longitude = -8305, .timezone = 33, .uses_dst = true },  // Detroit, MI
+//    { .name = "To", .latitude = 3567, .longitude = 13965, .timezone = 15, .uses_dst = false },  // Tokyo, JP
 };
 
 #endif // SUNRISE_SUNSET_FACE_H_