Time 在没有外部RTC和Wifi的情况下,如何在ESP32和Arduino IDE上设置epoch来更新时间?

Time 在没有外部RTC和Wifi的情况下,如何在ESP32和Arduino IDE上设置epoch来更新时间?,time,arduino,epoch,esp32,Time,Arduino,Epoch,Esp32,在我的ESP32上,我想知道没有Wifi连接或外部RTC芯片的实际时间。我从这个简单的代码开始 time_t now; struct tm* timeinfo; void Check_Time(void) { time(&now); timeinfo = localtime(&now); Serial.println(timeinfo); } void setup() { Serial.begin(115200); } void loop() { Che

在我的ESP32上,我想知道没有Wifi连接或外部RTC芯片的实际时间。我从这个简单的代码开始

time_t now;
struct tm* timeinfo;

void Check_Time(void) {
  time(&now);
  timeinfo = localtime(&now);
  Serial.println(timeinfo);
}

void setup() {
  Serial.begin(115200);
}

void loop() {
  Check_Time();
  delay(1000);
}
它可以工作,因为输出是

Thu Jan  1 00:07:57 1970
Thu Jan  1 00:07:58 1970
Thu Jan  1 00:07:59 1970
Thu Jan  1 00:08:00 1970
...

从1970年1月1日开始。现在我想把这次更新到实际的版本,但我还没有找到一个直接的解决方案。我知道我可以使用
mktime
功能将日期转换为
time\t
数据(是否正确?)?我应该如何处理这个问题?

我通过以下方法解决了这个问题:

#include <sys/time.h>
// ...
struct timeval tv;
tv.tv_sec = /* seconds since epoch here */;
tv.tv_usec = /* microseconds here */;
settimeofday(&tv, NULL);

老实说,我真的不知道你想要什么?你说“没有WiFi”和“没有RTC芯片”,但你“这次想更新”,那么你想更新是什么意思?手动?@hcheung是的,我想在我的应用程序中手动更新它。“无Wifi”指不使用某种sntp服务器(无互联网),“无RTC芯片”指使用集成在ESP32中的RTC。如果通过
time(&now)
命令我获得系统的历元,是否有设置此值的函数?tm是一个可以为其设置值的结构,这就是您要查找的内容?@hcheung使用mktime我获得
time\t
数据。如果我在
mktime
之后执行
time(&now)
我得到(例如)
1970年1月1日星期四00:08:00
再次:我不会用
mktime
函数更新系统时间。我想你永远不会看到我提供的链接上的示例。
1970 1 1 0 0 16
1970 1 1 0 0 17
1970 1 1 0 0 18
Time set
2020 12 6 22 45 32
2020 12 6 22 45 33
2020 12 6 22 45 34