我有一个 ESP32,我想用它从传感器捕获一些数据,我将把数据存储在云端,以便在其他地方查询。我正在使用 Arduino IDE。
我想要捕获的数据项之一是读取读数的日期和时间。 我发现实现这一点相当容易,并且网络上的许多地方都有执行此操作的示例(都非常相似)。
我在代码中使用以下内容:
...
// DateTime processing
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 0;
const int daylightOffset_sec = 3600;
String dateL = "Null";
void getLocalDateTime(){
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return;
}
dateL = (&timeinfo, "%Y%m%d %H:%M:%S");
Serial.println(dateL);
Serial.println(&timeinfo, "%Y%m%d %H:%M:%S");
}
void setup(){
...
}
void loop(){
...
getLocalDateTime();
...
}
我得到的输出如下
%Y%m%d %H:%M:%S
20240504 11:23:30
...只是与此处不相关的其他代码。
这只是实验代码,我试图将日期和时间放入我的 dateL 变量中,以便我可以在将其写入云时将其添加到我的数据中。
我发现的每个示例都使用相同的语法,并且只是用 println 编写它,我找不到存储它的示例。由于这必须是要打印的字符串(??),所以我很难理解为什么这不起作用。它可以很好地打印日期时间,但如果我使用相同的语法将其放入数据项中,它只是存储我正在使用的日期和时间的掩码语法。
我是 Arduino / C++ 的新手,所以要温柔。
感谢您的评论。我想我已经找到解决方案了。
将我的原始日期L定义为char:
char dateL[80];
然后在 getLocalDateTime 中使用以下代码代替:
void getLocalDateTime(){
time_t rawtime;
struct tm* timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
//char buffer[80];
strftime(dateL, 80, "%Y%m%d %H:%M:%S",timeinfo);
}
现在每当我调用它时都会更新 dateL 的值。