Как считать время до следующего дня недели?
Я хочу сделать в Arduino обратный отсчет, который показывает, сколько дней, часов и минут осталось до 12:00 пятницы.
В моей программе я использовал функцию в php strtotime('следующая пятница')
, которая, таким образом, могла вычислить дифференциальную метку времени и показать, сколько времени осталось до 12:00 пятницы.
Есть ли в Arduino функция strtotime('следующая пятница')
?
У меня есть RTC, который показывает только текущую дату и время, но не показывает текущий день недели.
ИЗМЕНИТЬ: У меня есть решение
У нас есть день недели. Мы умножили на 86400.
У нас есть час. Умножаем на 3600.
У нас есть минутка. Мы умножили на 60.
Добавить все.
Вычтите это из 604800.
nextFriday = 604800-((день недели * 86400)+(сейчас.час()*3600)+(сейчас.минута()*60)+сейчас.секунда());
Важно, пятница - это номер недели "0". пятница = 0; суббота = 1; и т.д...
2 ответа
Ключом к работе со временем является известное «базовое» время, чтобы вычислять все относительно него. Это называется эпохой. В разных системах используются разные эпохи, и каждая из них имеет свои преимущества и недостатки.
Я обычно использую в своем программировании эпоху UNIX (главным образом потому, что я фанат UNIX), то есть первое января 1970 года (01/01/1970). Это год, месяц, день, час, минута и секунда 0.
На основании этого вы можете рассчитать количество секунд между эпохой и любым другим временем по вашему выбору, если оно позже эпохи.
Чтобы рассчитать день недели для любой заданной даты, сначала нужно узнать день недели для эпохи (для UNIX это четверг), а затем определить, сколько дней проходит между эпохой и целевым временем.
Вычисление реального времени в секундах может быть несколько затруднительным из-за високосных лет и перехода на летнее время, но существует множество общедоступных алгоритмов, а многие библиотеки RTC включают функции для преобразования времени в эпохи и из них.
Например, в библиотеке времени Arduino есть функции для расчета дней недели и преобразования в формат "time_t" (секунды). с эпохи), которые можно использовать для определения разницы во времени. Например, если вы знаете, что сегодня вторник, и хотите следующую пятницу, то вы знаете, что пятница наступит через 3 дня в будущем, поэтому вы можете получить текущее время в секундах от эпохи, а затем добавить к этим трем дням секунды (3 × 60 × 60 × 24) к этому времени, чтобы получить такое же время суток в следующую пятницу.
Существуют общие примеры, например Определение дня недели — Википедия.
В приведенных ниже выражениях на языке C y, m и d — это, соответственно, целые переменные, представляющие год (например, 1988). , месяц (1–12) и день месяца (1–31).
(d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7
Также см. StackOverflow — Программа C для поиска дня недели указанная дата.
- Я не знаю, как сделать код для rtc, управляющего реле
- Ошибка программы Osepp DS1307 RTC (tmElements_t tm; не указывает тип)
- есть ли необработанный вывод RTC?
- Сервопривод начинает вращаться всякий раз, когда он подключен
- Нужно сделать кнопку, чтобы выключить будильник на часах
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
Большинство RTC имеют поле [dayOfWeek](https://github.com/adafruit/RTClib/blob/master/RTClib.h#L24)., @Gerben
В C/C++ это `strtotime("следующая пятница") — обратите внимание на двойные кавычки. Одинарные кавычки делают нечто совсем другое., @Nick Gammon