我在Arduino的设置中有这个代码,使用日期创建文件名。它有效但存在问题。
#include <DS3231.h>
#include <SD.h>
#include <SPI.h>
#include <dht.h>
dht DHT;
Time now;
int dt;
int t;
unsigned int interation = 1;
char filename[12];
DS3231 rtc(SDA, SCL);
void setup() {
Serial.begin(9600);
rtc.begin(); // Initialize the rtc object
rtc.setDOW(THURSDAY); // Set Day-of-Week to SUNDAY
rtc.setTime(21, 48, 0); // Set the time to 12:00:00 (24hr format)
rtc.setDate(10, 11, 2017); // Set the date to January 1st, 2014
now = rtc.getTime();
String(String(now.year) + String(now.mon) + String(now.dow) + ".csv").toCharArray(filename, 12);
Serial.println(filename);
正在打印一个日期字符串,但当它是一位数时,月份数字中没有前导零。
代码打印此2017111.csv
而不是20170111.csv
。我该如何解决这个问题?
答案 0 :(得分:1)
您需要一个if语句来测试该数字是否小于10,如果是,则添加您自己的0.
String myMonthString = "";
int mon = now.mon;
if(mon < 10){
myMonthString += '0';
}
myMonthString += mon;
更优雅的解决方案是使用sprintf。这也没有使用String类,它可以在小微控制器上做一些坏事,并且通常在Arduino上要避免。
char fileName[12];
sprintf(fileName, "%d%02d%02d.csv", now.year, now.mon, now.dow);