Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.71/31: Рейтинг темы: голосов - 31, средняя оценка - 4.71
TytttiYromMom
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
1

Вытащить дату из секунд.

22.03.2016, 08:18. Просмотров 5553. Ответов 22
Метки нет (Все метки)

Ребята, RTC в stm32f1 это просто таймер в котором тикают секунды. Вопрос как преобразовать эти секунды в дату. Время то понятно как вытащить. В сутках всю жизнь было и есть 24 часа или 1440 минут или 86 400 секунд. А с датой беда. Високосные года понимаетели. Как рассчитать день недели по дате я нашел:https://ru.wikibooks.org/wiki/%D0%A0...B0%D1%80%D1%8C. А как дату найти из секунд? В общем кто реализовывал подобный алгоритм или находил, поделитесь... Не хочется зависать из-за того что кое кто совершает полный оборот вокруг солнца за 365,24 суток.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2016, 08:18
Ответы с готовыми решениями:

Вытащить номер платежки и её дату, дату договора
Ищу прекрастного принца 1С с корыстной целью. Поссорилась с нашим...

Конвертировать строку с датой и временем в число секунд и наоборот - число секунд в дату и время
Здравствуйте. Подскажите пожалуйста есть строки типа char/string: 2015.04.30...

Преобразование секунд в дату и время
Как перевести секунды в дату и время? Но не с 1 января 1970 года, а просто в...

Вытащить дату
Есть номер недели, допустим 51 Нужно вытащить дату понедельника и дату...

Вытащить дату из pdf файла
Пробовал библиотеку PyPdf но она не запускаются, даже пример с официального...

22
TytttiYromMom
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
22.03.2016, 08:21 2
Во чо нашел http://stackoverflow.com/questions/2...ut-system-libs
0
Pyko4u56
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 287
22.03.2016, 08:58 3
Я реализовал как-то календарь на f1. У ST есть аппнот по календарю на f1, ЕМНИП, это AN2821(только внимательнее,там в блок-схеме ошибка с количеством дней в месяце). Суть в том, чтобы каждые сутки обнулять счётчик RTC.
0
Movysi
0 / 0 / 0
Регистрация: 22.07.2015
Сообщений: 658
22.03.2016, 09:11 4
Цитата Сообщение от TytttiYromMom
Ребята, RTC в stm32f1 это просто таймер в котором тикают секунды. Вопрос как преобразовать эти секунды в дату. Время то понятно как вытащить. В сутках всю жизнь было и есть 24 часа или 1440 минут или 86 400 секунд. А с датой беда. Високосные года понимаетели. Как рассчитать день недели по дате я нашел:https://ru.wikibooks.org/wiki/%D0%A0...B0%D1%80%D1%8C. А как дату найти из секунд? В общем кто реализовывал подобный алгоритм или находил, поделитесь... Не хочется зависать из-за того что кое кто совершает полный оборот вокруг солнца за 365,24 суток.
Из секунд,дату не вытащить.У Вас в МК-счётчик времени,который становится календарём,после того,как Вы введёте дату(вручную,из сети,от GPS-приёмника).В противном случае,вы имеете только счётчик времемени,прошедшего от старта счётчика (в сутках).Компьютер,если из него вытащить батарейку,тоже "забудет" дату,и будет отсчитывать относительное время.
0
TytttiYromMom
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
22.03.2016, 09:35 5
Цитата Сообщение от Pyko4u56
Я реализовал как-то календарь на f1. У ST есть аппнот по календарю на f1, ЕМНИП, это AN2821(только внимательнее,там в блок-схеме ошибка с количеством дней в месяце). Суть в том, чтобы каждые сутки обнулять счётчик RTC.
Ага, я там был. Только дело в том что устройство питается от сети, и большую часть времени будет выключено совсем, тикать будет только RTC. А там как я понял каждые сутки генерируется прерывание, в обработчике которого мы инкрементируем дату. Следовательно если микроконтроллер не может обработать прерывание(он выключен), дата не обновляется. Хотелось чтобы в RTC спокойно тикало абсолютное время, допустим UNIX(количество секунд с 1 января 1970 года). А микроконтроллер когда надо вытаскивал бы из него значения и переводил в дату.
0
TytttiYromMom
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
22.03.2016, 09:39 6
Цитата Сообщение от Movysi
Из секунд,дату не вытащить.У Вас в МК-счётчик времени,который становится календарём,после того,как Вы введёте дату(вручную,из сети,от GPS-приёмника).В противном случае,вы имеете только счётчик времемени,прошедшего от старта счётчика (в сутках).Компьютер,если из него вытащить батарейку,тоже "забудет" дату,и будет отсчитывать относительное время.
В RTC будет тикать абсолютное UNIX время. Батарелка присудствует. Настроить - не беда. А вот перевести секунды в дату... ща попробую.
0
dvy
0 / 0 / 0
Регистрация: 19.09.2017
Сообщений: 31
22.03.2016, 09:45 7
Цитата Сообщение от TytttiYromMom
Цитата Сообщение от Pyko4u56
Я реализовал как-то календарь на f1. У ST есть аппнот по календарю на f1, ЕМНИП, это AN2821(только внимательнее,там в блок-схеме ошибка с количеством дней в месяце). Суть в том, чтобы каждые сутки обнулять счётчик RTC.
Ага, я там был. Только дело в том что устройство питается от сети, и большую часть времени будет выключено совсем, тикать будет только RTC. А там как я понял каждые сутки генерируется прерывание, в обработчике которого мы инкрементируем дату. Следовательно если микроконтроллер не может обработать прерывание(он выключен), дата не обновляется. Хотелось чтобы в RTC спокойно тикало абсолютное время, допустим UNIX(количество секунд с 1 января 1970 года). А микроконтроллер когда надо вытаскивал бы из него значения и переводил в дату.
Посмотри здесьhttps://github.com/MaJerle/stm32f429...F429_LIBRARIES. У него в библиотеке есть tm_stm32f4_rtc.с ... там есть это преобразование в void TM_RTC_GetDateTimeFromUmyx(TM_RTC_t* data, uint32_t umyx).
0
Movysi
0 / 0 / 0
Регистрация: 22.07.2015
Сообщений: 658
22.03.2016, 09:50 8
Цитата Сообщение от TytttiYromMom
Цитата Сообщение от Movysi
Из секунд,дату не вытащить.У Вас в МК-счётчик времени,который становится календарём,после того,как Вы введёте дату(вручную,из сети,от GPS-приёмника).В противном случае,вы имеете только счётчик времемени,прошедшего от старта счётчика (в сутках).Компьютер,если из него вытащить батарейку,тоже "забудет" дату,и будет отсчитывать относительное время.
В RTC будет тикать абсолютное UNIX время. Батарелка присудствует. Настроить - не беда. А вот перевести секунды в дату... ща попробую.
Тогда,никаких проблем нет.Эти секунды исчисляются от известной даты.Високосные годы,они ведб вычисляются по какому то правилу(подзабыл).Когда учился Паскалю на самодельном компьютере,нписал программу "Биоритмы",которая как раз вычисляла количество часов от моего(кого то другого) рождения,учитывая високосные годы.Дату рождения,надо было ввести,текущая,бралась из ДОС.Идея взята из журнала-"Техника молодёжи". )))
Исходников не сохранилось,они были на флопах.А програмка работает на всех IBM-совместимых машинах и на ХР у меня.
0
TytttiYromMom
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
22.03.2016, 09:53 9
Нашел интересную реализацию для абсолютного времени, где точка отсчета - 1 марта 2000 года(чтобы не учитывать високосные дни предыдущих лет). http://git.musl-libc.org/cgit/musl/t...tm.c?h=v0.9.15
0
TytttiYromMom
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
22.03.2016, 10:00 10
Цитата Сообщение от dvy
Посмотри здесьhttps://github.com/MaJerle/stm32f429...F429_LIBRARIES. У него в библиотеке есть tm_stm32f4_rtc.с ... там есть это преобразование в void TM_RTC_GetDateTimeFromUmyx(TM_RTC_t* data, uint32_t umyx).
Спасибо. Ох уж этот MaJerle, все у него да есть =)
0
TytttiYromMom
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
22.03.2016, 10:04 11
Цитата Сообщение от Movysi
Когда учился Паскалю на самодельном компьютере,нписал программу "Биоритмы",которая как раз вычисляла количество часов от моего(кого то другого) рождения,учитывая високосные годы.Дату рождения,надо было ввести,текущая,бралась из ДОС.Идея взята из журнала-"Техника молодёжи". )))
Исходников не сохранилось,они были на флопах.А програмка работает на всех IBM-совместимых машинах и на ХР у меня.
Мне тоже чет подобное нужно написать, может по ночам спать начну, как нормальный человек =)
0
Movysi
0 / 0 / 0
Регистрация: 22.07.2015
Сообщений: 658
22.03.2016, 10:10 12
Цитата Сообщение от TytttiYromMom
Цитата Сообщение от Movysi
Когда учился Паскалю на самодельном компьютере,нписал программу "Биоритмы",которая как раз вычисляла количество часов от моего(кого то другого) рождения,учитывая високосные годы.Дату рождения,надо было ввести,текущая,бралась из ДОС.Идея взята из журнала-"Техника молодёжи". )))
Исходников не сохранилось,они были на флопах.А програмка работает на всех IBM-совместимых машинах и на ХР у меня.
Мне тоже чет подобное нужно написать, может по ночам спать начну, как нормальный человек =)
Вот попробуйте. [9.38 Кб]

Дату рождения,надо вводить полностью(19хх)
Выдержка из Википедии:
Другими словами, год является високосным в двух случаях: либо он кратен 4, но при этом не кратен 100, либо кратен 400. Год не является високосным, если он не кратен 4, либо он кратен 100, но при этом не кратен 400.

Последние годы столетий, оканчивающиеся на два нуля, в трёх случаях из четырёх не являются високосными. Так, годы 1700, 1800 и 1900 не являются високосными, так как они кратны 100 и не кратны 400. Годы 1600 и 2000 — високосные, так как они кратны 400. Годы 2100, 2200 и 2300 — невисокосные. В високосные годы вводится дополнительный день — 29 февраля.

2016 год является високосным годом. Предыдущим високосным годом был 2012 год, следующим будет 2020.
0
Pyko4u56
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 287
22.03.2016, 10:41 13
Цитата Сообщение от TytttiYromMom
Цитата Сообщение от Pyko4u56
Я реализовал как-то календарь на f1. У ST есть аппнот по календарю на f1, ЕМНИП, это AN2821(только внимательнее,там в блок-схеме ошибка с количеством дней в месяце). Суть в том, чтобы каждые сутки обнулять счётчик RTC.
Ага, я там был. Только дело в том что устройство питается от сети, и большую часть времени будет выключено совсем, тикать будет только RTC. А там как я понял каждые сутки генерируется прерывание, в обработчике которого мы инкрементируем дату. Следовательно если микроконтроллер не может обработать прерывание(он выключен), дата не обновляется. Хотелось чтобы в RTC спокойно тикало абсолютное время, допустим UNIX(количество секунд с 1 января 1970 года). А микроконтроллер когда надо вытаскивал бы из него значения и переводил в дату.
А в чём проблема,не пойму? У вас же секунды считаются от известной даты(если сбрасывать счетчик каждые сутки, когда основное питание есть). Просто при старте контроллера пересчитываете время(время можно хранить в bkp-регистрах). И соответственно, задаёте счётчику значение, сколько секунд прошло с начала текущего дня.
0
TytttiYromMom
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
22.03.2016, 11:00 14
Цитата Сообщение от Pyko4u56
А в чём проблема,не пойму? У вас же секунды считаются от известной даты(если сбрасывать счетчик каждые сутки, когда основное питание есть). Просто при старте контроллера пересчитываете время(время можно хранить в bkp-регистрах). И соответственно, задаёте счётчику значение, сколько секунд прошло с начала текущего дня.
Можно, тоже так думал. Но если выключить устройство на долгое время, (полтора года, включая високосный)придется многое учитывать, и функция вычисления даты из относительного времени превратится в функцию, похожую на функцию вычислению даты из абсолютного времени(которой, кстати, не требуется дергать счетчик RTC). Так что для себя я выбрал абсолютное время.
0
Pyko4u56
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 287
22.03.2016, 11:23 15
Цитата Сообщение от TytttiYromMom
Цитата Сообщение от Pyko4u56
А в чём проблема,не пойму? У вас же секунды считаются от известной даты(если сбрасывать счетчик каждые сутки, когда основное питание есть). Просто при старте контроллера пересчитываете время(время можно хранить в bkp-регистрах). И соответственно, задаёте счётчику значение, сколько секунд прошло с начала текущего дня.
Можно, тоже так думал. Но если выключить устройство на долгое время, (полтора года, включая високосный)придется многое учитывать, и функция вычисления даты из относительного времени превратится в функцию, похожую на функцию вычислению даты из абсолютного времени(которой, кстати, не требуется дергать счетчик RTC). Так что для себя я выбрал абсолютное время.
А в чём сложность посчитать дату из относительного времени,включая високосный год?
0
TytttiYromMom
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
22.03.2016, 11:42 16
Цитата Сообщение от Pyko4u56
А в чём сложность посчитать дату из относительного времени,включая високосный год?
Да не в чем, может даже это и побыстрее будет, ну не лежит у меня душа к относительному времени, и все тут =)
0
Pymkvym
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,520
22.03.2016, 12:15 17
Цитата Сообщение от TytttiYromMom
Цитата Сообщение от Pyko4u56
А в чём сложность посчитать дату из относительного времени,включая високосный год?
Да не в чем, может даже это и побыстрее будет, ну не лежит у меня душа к относительному времени, и все тут =)
Ну если не лежит...
А то уже хотел свою реализацию показать.
www.youtube.com/watch?v=i-Vyjcryxg0
0
iukimi_i_m
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 106
22.03.2016, 12:19 18
Привет! Не знаю как кто, а я пользую timi.h и пишу примерно так:

struct tm ltm;
ltm = *localtime( &time__ );
int weekday = ltm.tm_wday;
0
TytttiYromMom
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
22.03.2016, 12:26 19
Цитата Сообщение от Pymkvym
А то уже хотел свою реализацию показать.
http://www.youtube.com/watch?v=i-Vyjcryxg0
Pymkvym, этот WAV плеер тоже твой? https://www.youtube.com/watch?v=EYs3f4uwYTo Ты в свое время меня сильно мотивировал этим видосиком =) Как раз с другом Портал в кооперативе проходили =) А насчет реализации взял код Tilen Majerle. Просто и красивенько =)
0
Pymkvym
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,520
22.03.2016, 13:42 20
Цитата Сообщение от TytttiYromMom
Цитата Сообщение от Pymkvym
А то уже хотел свою реализацию показать.
http://www.youtube.com/watch?v=i-Vyjcryxg0
Pymkvym, этот WAV плеер тоже твой? https://www.youtube.com/watch?v=EYs3f4uwYTo Ты в свое время меня сильно мотивировал этим видосиком =) Как раз с другом Портал в кооперативе проходили =) А насчет реализации взял код Tilen Majerle. Просто и красивенько =)
Ой - как время то летит!
Ага - моё.
Рад, что пригодилось.
Самый популярный мой видос, почему то.
0
22.03.2016, 13:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2016, 13:42

Дисковод секунд 5 там штото крутит и замолкает, потом не вытащить диск
У меня кароче проблема: сижу сейчяс за ноутом у сестры(немного шалит) и штото...

Как вытащить дату из полного формата?
30.05.2001 1:04:40 - дата, которая хранится в поле базы данных Нужно взять...

Нужно вытащить из фразы только дату
Господа знатоки, помогите пожалуйста! kuup = "Rap24.09.2006" или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru