Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ИАР: проблема 2036 года
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Dog Pawlowa
Ну, я то не доживу, или буду счастливым маразматиком, а для молодых:

при вызове mktime, если в struct tm.tm_year>135, то все поля структуры искажаются.
ИАР MSP430 4.21

zltigo, я Ваши функции так и не подключил, а было бы интересно знать, как они работают. Не проверяли?
AHTOXA
Дык, это же unix time smile.gif
Проблема 2038
Цитата
19 января 2038 года в 03:14:08 по всемирному времени значение переменной типа time_t, отсчитывающей число секунд, прошедших с 1 января 1970 года, достигнет 2^31, что может привести к ошибочной интерпретации этого числа как отрицательного.


Так что ни IAR ни zltigo тут не при чёмsmile.gif
Dog Pawlowa
Цитата(AHTOXA @ Sep 12 2009, 09:05) *
Дык, это же ..Проблема 2038

Аааа...
Только у меня почему-то раньше, даже в конце 35 наблюдается. unsure.gif

Ладно, раз уж все собрались ...
Подскажите, как вычислить время в следующий понедельник 00:00.
Еще нужно время первого числа следующего месяца, но это проще, и сам могу.
VladimirYU
Цитата(Dog Pawlowa @ Sep 12 2009, 10:47) *
Аааа...
Только у меня почему-то раньше, даже в конце 35 наблюдается. unsure.gif

Ладно, раз уж все собрались ...
Подскажите, как вычислить время в следующий понедельник 00:00.
Еще нужно время первого числа следующего месяца, но это проще, и сам могу.

Может проще новую эру открыть.... и полная перезагрузка biggrin.gif
Dog Pawlowa
Цитата(VladimirYU @ Sep 12 2009, 10:18) *
Может проще новую эру открыть....

Увы, у заказчика нет фантазии, он хочет статистику не по эрам, а по неделям и месяцам.
AHTOXA
Цитата(Dog Pawlowa @ Sep 12 2009, 12:47) *
Аааа...
Только у меня почему-то раньше, даже в конце 35 наблюдается. unsure.gif


Ну это уже IAR наверное ещё чутка отхватилsmile.gif

Цитата
Подскажите, как вычислить время в следующий понедельник 00:00.
Еще нужно время первого числа следующего месяца, но это проще, и сам могу.


Навскидку, как-то так:

Код
time_t find_next_monday()
{
    time_t t = time(0);
    struct tm * l;
    do
    {
        t += 60*60*24L;
        l = localtime(&t);
    }
    while (l->tm_wday != 1);

    l->tm_sec = 0;
    l->tm_min = 0;
    l->tm_hour = 0;
    t = mktime(l);
    return t;
}


ЗЫ. Интересное время настанет в 38 году. Останутся только программы на Delphi и эксельные таблицыsmile.gif))
Dog Pawlowa
Цитата(AHTOXA @ Sep 12 2009, 10:38) *
Навскидку, как-то так:

Спасибо.
AHTOXA
Цитата(Dog Pawlowa @ Sep 12 2009, 13:46) *
Спасибо.


Да не за чтоsmile.gif Вот так наверное будет оптимальнее, цикл там совершенно лишний:
Код
time_t find_next_monday()
{
    time_t t = time(0);
    struct tm * l;
    l = localtime(&t);
    t += 60*60*24L * ((8 - l->tm_wday) % 7);
    l = localtime(&t);

    l->tm_sec = 0;
    l->tm_min = 0;
    l->tm_hour = 0;
    t = mktime(l);
    return t;
}
zltigo
Цитата(Dog Pawlowa @ Sep 12 2009, 06:08) *
zltigo, я Ваши функции так и не подключил, а было бы интересно знать, как они работают. Не проверяли?

Все уже объяснили, но если замените time_t на unsigned long, то будут работать лучше smile.gif и точно позволит избежать прижизненных разборок.... Я последнее время для внутреннего потребления так стал делать, ибо область применения консервативная (все еще модернизируется оборудование середины 80x ) - вдруг какое железо и доживет.
Цитата(Dog Pawlowa @ Sep 12 2009, 09:22) *
Увы, у заказчика нет фантазии, он хочет статистику не по эрам, а по неделям и месяцам.

Везет Вам с заказчиком, лунных календарей, или лунно-солнечных от сотворения мира или дня рождения Императора не хотят smile.gif
И не надо думать, что такое 23 Элул 5769 smile.gif. Вот уж где дурдом.
AHTOXA
Цитата(zltigo @ Sep 12 2009, 14:45) *
Все уже объяснили, но если замените time_t на unsigned long, то будут работать лучше smile.gif и точно позволит избежать прижизненных разборок....


Что за пессимизм? smile.gif
Dog Pawlowa
Цитата(AHTOXA @ Sep 12 2009, 11:54) *
Что за пессимизм? smile.gif

Угу. У меня паспорт, действительный по 2058, почему-то приводящий в удивление немецких пограничников.
Они не смотрели кино про Маклауда smile.gif

Цитата
если замените time_t на unsigned long, то будут работать лучше

Спасибо. Проблема вылезла в менюшке установки времени, раз я там уже учел, то буду ждать апокалипсис, как все smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.