Перейти к содержанию
    

работа с датой и временем на контроллере..

думаю как удобнее работать с датой на мк..

думаю завести переменную в еепроме = время в уникс секундах(с 1970г) в момент сброса таймера секунд.. ну и потом к этой переменной прибавлять количество прошедших секунд...

для этого нужны функции перевода

1) даты в юникс секунды

2) юникс секунды в дату

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для этого нужны функции перевода

1) даты в юникс секунды

2) юникс секунды в дату

 

#include <time.h>

 

Подробности тут:

http://ru.wikipedia.org/wiki/Time.h

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это для компьютеров а мне бы на мк и на языке си

Язык "C" для МК ничем не отличается от оного для компьютера. Библиотека стандартная и тоже является частью языка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

http://ru.wikipedia.org/wiki/Юлианская_дата

http://stackoverflow.com/questions/1002542...-timestamp-in-c

 

недавно сам разбирался, только с NTP-временем, - 1-ая ссылка очень полезна в плане понимания, откуда берётся время (+ перевод unixtime_to_datetime)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) даты в юникс секунды

2) юникс секунды в дату

1) mktime() http://linux.die.net/man/3/mktime

2) time(), ctime(), strftime() http://linux.die.net/man/2/time

И не надо собственных велосипедов. Стандартная библиотека Си имеет всё необходимое для этих задач. Единственное отличие на МК - получаете текущее время не вызовом time(NULL), а из собственного источника (RTC, например).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

всё не то в результате нужно получить из количества секунд год мес день час мин сек а в примерах только половина этих данных вычисляется ито у меня не получилось результата. линуксовые функции тоже грамоздкие на структурах.

придется самому написать.. я думал такого уже полно везде

 

а ещё в мануале написанно что RTC у stm32 может календарь вести аппаратно.. а как пока не нашел примеров.(

Изменено пользователем super_puper

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

всё не то в результате нужно получить из количества секунд год мес день час мин сек а в примерах только половина этих данных вычисляется...

Чтобы получить часы, минуты и секунды (то чего не хватает в моем примере) надо сделать следующее:

    unsigned int UnixTime;                          // Исходное кол-во секунд с 00:00:00 c 1-го января 1970 года

    unsigned int Second = UnixTime % 60;
    unsigned int Minutes = (UnixTime / 60) % 60;
    unsigned int Hours = (UnixTime / 3600) % 24;

P.S. Да еще забыл, мой пример считает дату исходя из кол-во секунд с 00:00:00 1-го января 2000-го года, а не 1970-го.

Что бы считать с 1970-го надо первую строчку функции

    u_int32 d = SecondQn / 86400 + 2451544;

заменить на:

    u_int32 d = SecondQn / 86400 + 2440587;

 

Вот еще ссылка на описание алгоритмов перевода Юлианской даты в Григорианскую и обратно.

 

Для проверки алгоритмов преобразования, удобно использовать вот этот онлайн калькулятор.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

большое вам спасибо что подробно разжевали! всё заработало!

дописал только :

Second = SecondQn % 60;

Minutes = (SecondQn / 60) % 60;

Hours = (SecondQn / 3600) % 24;

Изменено пользователем super_puper

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...