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

 
 
 
Reply to this topicStart new topic
> STM32F100 - работа со временем и датой
Вячик13
сообщение Feb 5 2013, 07:08
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 17-01-12
Пользователь №: 69 604



Задача - преобразовать количество секунд из RTC в строку даты и времени и обратное преобразование.
Имеются ли в Keil стандартные функции для этих целей? Пример использования, если можно.
Если нет, то поделитесь, пожалуйста, текстом.
Go to the top of the page
 
+Quote Post
adnega
сообщение Feb 5 2013, 07:12
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Вячик13 @ Feb 5 2013, 11:08) *
Задача - преобразовать количество секунд из RTC в строку даты и времени и обратное преобразование.
Имеются ли в Keil стандартные функции для этих целей? Пример использования, если можно.
Если нет, то поделитесь, пожалуйста, текстом.

Код
//-----------------------------------------------------------------------------
//    DWORD int_to_time(DWORD x, DWORD *hh, DWORD *mm, DWORD *ss)
//-----------------------------------------------------------------------------
DWORD int_to_time(DWORD x, DWORD *hh, DWORD *mm, DWORD *ss)
{
    *ss = x % 60;
    x /= 60;
    *mm = x % 60;
    x /= 60;
    *hh = x % 24;
    x /= 24;
    return x;
}

//-----------------------------------------------------------------------------
//    DWORD    date_to_int(DWORD y, DWORD m, DWORD d)
//-----------------------------------------------------------------------------
DWORD    date_to_int(DWORD y, DWORD m, DWORD d)
{
    if(m < 3)
    {
        m += 12;
        y -= 1;
    }
    return ((y * 1461) >> 2) + ((m * 306 + 7) / 10) + d - 730533;
}

//-----------------------------------------------------------------------------
//    void int_to_date(DWORD jd, DWORD *y, DWORD *m, DWORD *d)
//-----------------------------------------------------------------------------
void int_to_date(DWORD jd, DWORD *y, DWORD *m, DWORD *d)
{
    int    aa, bb, cc, dd, ee, mm, xx;

    aa = jd + 2483589;
    bb = (aa * 4 + 3) / 146097;
    cc = aa - ((146097 * bb) >> 2);
    dd = (4 * cc + 3) / 1461;
    ee = cc - ((1461 * dd) >> 2);
    mm = ((5 * ee + 2) * 13707) >> 21;

    *d = ee - ((16043274 * mm + 209716) >> 19) + 1;
    *m = mm + 3 - 12 * ((mm * 27) >> 8);
    *y = 100 * bb + dd - 4800 + ((mm * 27) >> 8);
}


Корректно работает от 2000 до 2099 годов включительно.
Начало эпохи 01.01.2000 00:00:00.

Примеры
Код
// установка
rtc_set_datetime(((date_to_int(dt->YYYY, dt->MM, dt->DD) * 24 + dt->hh) * 60 + dt->mm) * 60 + dt->ss);

// считывание
if(rtc_get_datetime(&datetime))
{
    datetime = int_to_time(datetime, &hh, &mm, &ss);
    int_to_date(datetime, &y, &m, &d);
}
Go to the top of the page
 
+Quote Post
Вячик13
сообщение Feb 5 2013, 08:12
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 17-01-12
Пользователь №: 69 604



Спасибо, подходит.
Go to the top of the page
 
+Quote Post
Hamster1979
сообщение Feb 16 2013, 09:55
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 26-03-05
Пользователь №: 3 697



зачем изобретать велосипед? time_t как раз лучше всего для этого. Смотрите <time.h>
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 08:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.0136 секунд с 7
ELECTRONIX ©2004-2016