我正在为 ESP32C3(一个 Arduino 类型的硬件)编写 C 代码。没有内部时钟,因此为了获取与互联网上的 NTP 服务器通话的时间。
我还与天气服务器通信以获取本地天气,包括日出和日落。
现在一切都很好,除了天气服务器似乎不知道夏令时,所以它给我的值是一小时后的值。
所以我写了这个例程来尝试弄清楚是否需要调整日出/日落的答案[在Arduino C中]
这是定义,是的,我在欧洲。
夏令时总是从三月的第二个星期天开始, 于美国十一月的第一个星期日结束。这 与英国和欧盟形成鲜明对比,英国和欧盟的夏令时开始于 三月的最后一个星期日,十月的最后一个星期日结束。
char dayName[10];
char dayMonth[2];
char monthYear[2];
strftime(dayName,64,"%A", &timeinfo); // day of the week
strftime(dayMonth,64,"%d", &timeinfo); // day of the month
strftime(monthYear,64,"%B", &timeinfo); // month of the year
if (!strcmp(dayName, "Sunday")) {
if (atoi(monthYear) == 10) {
if (atoi(dayMonth) > 31 - 7) {
// last Sunday of the month October, DST = false
DST = false;
}
}
if (atoi(monthYear) == 3) {
if (atoi(dayMonth) > 31 - 7) {
// last Sunday of the month March, DST = false
DST = true;
}
}
}
问题;
它看起来不错,但你可以将dayName减少到64到10,将dayMonth和monthYear减少到30,这样你就可以优化存储(记住这是一个ESP,不是一个非常强大的芯片,所以优化内存使用是必要的),您还可以添加日志语句来让您了解情况,例如
ESP_LOGI(TAG, "DST: %s", DST ? "true" : "false");
。