I use your program in zip code 49431. The program shows sunset and sunrise times 1 hour too early

Thanks again for pointing this out. The short answer to the problem was that it was using the wrong time zone information. The longer answer is that I was storing the timezone information as offsets of UTC along with whether or not daylight savings was observed with each location. Then I’d find the timezone by matching on that data. Turns out EST is not the only one that is -5 from UTC and observes daylight savings, so it was using another timezone’s information that happened to no longer match EST right now. So I am no longer storing the offset/uses DST flags per location, and instead store a pointer to the specific timezone that should be used.
Thanks!
Daniel