DateTime в строку

По какой-то причине я не могу использовать время.h lib.

Можете ли вы, ребята, рассказать мне, как создать строку из даты-времени в такой формат:

yyyy.MM.dd:hh.mm.ss
2014.10.29:07.12.33

Кажется странным, что я не могу найти ни одного примера этого.

, 👍3

Обсуждение

Это потому, что все они просто печатают это., @Ignacio Vazquez-Abrams

О каком " времени` ты говоришь? Тип из RTClib? О какой-то другой "дате-времени"?, @AnT


3 ответа


2

Боюсь, что для этого нет встроенной функции.

Я предлагаю вам создать метод, который будет форматировать строку так. Что-то вроде:

void formatTime()
{
   string str = year() + "." + month() + "." + day() + ":" + hour() + "FILL IN THE REST";
}
,

Что такое " строка` в данном случае? И выражение инициализатора определенно недопустимо., @AnT


4

Это то, чего ты хочешь, приятель?

char buf1[20];
DateTime now = rtc.now(); 
//Updated now.day to now.date
sprintf(buf1, "%02d:%02d:%02d %02d/%02d/%02d",  now.hour(), now.minute(), now.second(), now.date(), now.month(), now.year()); 

Serial.print(F("Date/Time: "));
Serial.println(buf1);
,

Отличный ответ, за исключением того, что "сейчас.день ()" не существует – сейчас.дата() верна. (Я пытался редактировать, но SE требует, чтобы правки были не менее 6 символов...), @Caesar

спасибо за правку, братан., @şevket Karayılan


3

Если под DateTime вы имеете в виду <code>DateTime</code> RTClib (это то, что вы должны уточнить в своем вопросе), то вы можете вызвать <code>метод unixtime()</code> для вашего объекта DateTime. Возвращаемое значение является обычным временем "эпохи" Unix, которое можно использовать в качестве значения time_t с функциями из <time.h><time.h> (и это <time.h><time.h>, а не <Time.h><Time.h>).

Например, вы можете использовать ctime для преобразования значения Unix time_t в строку C, хотя формат этой строки отличается от запрошенного вами

DateTime dt;
...
time_t t = dt.unixtime();

const char *str = ctime(&t);
Serial.println(str);

На Arduino у вас также есть ctime_r, доступный вам в качестве повторной версии ctime.

Или, если вам нужна большая гибкость с форматом, вы можете использовать gmtime или localtime, а затем strftime, но это может быть чрезмерным, так как структура tm, созданная gmtime, по сути, очень похожа на DateTime. Вы можете просто использовать snprintf способом, предложенным в ответе @şevket Karayılan.

Тем не менее, обратите внимание, что strftime предоставляет вам довольно широкие возможности форматирования, для повторного использования которых потребуется некоторое усилие вручную

DateTime dt;
...
time_t t = dt.unixtime();
struct tm *lt = localtime(&t);

char str[32];
strftime(str, sizeof str, "%Y.%m.%d:%H.%M.%S", lt); 
Serial.println(str);

strftime(str, sizeof str, "%x %X", lt); 
Serial.println(str);

strftime(str, sizeof str, "%F %T", lt); 
Serial.println(str);
,