DateTime в строку
По какой-то причине я не могу использовать время.h
lib.
Можете ли вы, ребята, рассказать мне, как создать строку из даты-времени в такой формат:
yyyy.MM.dd:hh.mm.ss
2014.10.29:07.12.33
Кажется странным, что я не могу найти ни одного примера этого.
@Terrence, 👍3
Обсуждение3 ответа
Боюсь, что для этого нет встроенной функции.
Я предлагаю вам создать метод, который будет форматировать строку так. Что-то вроде:
void formatTime()
{
string str = year() + "." + month() + "." + day() + ":" + hour() + "FILL IN THE REST";
}
Что такое " строка` в данном случае? И выражение инициализатора определенно недопустимо., @AnT
Это то, чего ты хочешь, приятель?
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
Если под 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);
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- форматирование строк в Arduino для вывода
- Очень простая операция Arduino Uno Serial.readString()
- Как преобразовать строку в массив байтов
- Как отправить строку на мастер с помощью i2c
- Создание форматированной строки (включая числа с плавающей запятой) в Arduino-совместимом C++
- Проблемы с преобразованием byte[] в String
Это потому, что все они просто печатают это., @Ignacio Vazquez-Abrams
О каком " времени` ты говоришь? Тип из RTClib? О какой-то другой "дате-времени"?, @AnT