Arduino 代码来确定我们是否处于夏令时

问题描述 投票:0回答:1

我正在为 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;
    }
  }
}

问题;

  1. 这段代码看起来正常吗?
  2. 有没有更好的方法 这个,记住它不是计算机,它是 ESP32C3;例如,您无法获取日期 - 它不知道日期/时间是什么。
c arduino dst
1个回答
0
投票

它看起来不错,但你可以将dayName减少到64到10,将dayMonth和monthYear减少到30,这样你就可以优化存储(记住这是一个ESP,不是一个非常强大的芯片,所以优化内存使用是必要的),您还可以添加日志语句来让您了解情况,例如

ESP_LOGI(TAG, "DST: %s", DST ? "true" : "false");

© www.soinside.com 2019 - 2024. All rights reserved.