Arduino打印两位数的月份格式

时间:2017-10-12 03:51:34

标签: c++ date time arduino format

我在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。我该如何解决这个问题?

1 个答案:

答案 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);