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

ИАР: проблема 2036 года

Ну, я то не доживу, или буду счастливым маразматиком, а для молодых:

 

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

ИАР MSP430 4.21

 

zltigo, я Ваши функции так и не подключил, а было бы интересно знать, как они работают. Не проверяли?

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


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

Дык, это же unix time :)

Проблема 2038

19 января 2038 года в 03:14:08 по всемирному времени значение переменной типа time_t, отсчитывающей число секунд, прошедших с 1 января 1970 года, достигнет 2^31, что может привести к ошибочной интерпретации этого числа как отрицательного.

 

Так что ни IAR ни zltigo тут не при чём:)

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


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

Дык, это же ..Проблема 2038

Аааа...

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

 

Ладно, раз уж все собрались ...

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

Еще нужно время первого числа следующего месяца, но это проще, и сам могу.

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


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

Аааа...

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

 

Ладно, раз уж все собрались ...

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

Еще нужно время первого числа следующего месяца, но это проще, и сам могу.

Может проще новую эру открыть.... и полная перезагрузка :biggrin:

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


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

Может проще новую эру открыть....

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

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


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

Аааа...

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

 

Ну это уже IAR наверное ещё чутка отхватил:)

 

Подскажите, как вычислить время в следующий понедельник 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 и эксельные таблицы:)))

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


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

Спасибо.

 

Да не за что:) Вот так наверное будет оптимальнее, цикл там совершенно лишний:

 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, я Ваши функции так и не подключил, а было бы интересно знать, как они работают. Не проверяли?

Все уже объяснили, но если замените time_t на unsigned long, то будут работать лучше :) и точно позволит избежать прижизненных разборок.... Я последнее время для внутреннего потребления так стал делать, ибо область применения консервативная (все еще модернизируется оборудование середины 80x ) - вдруг какое железо и доживет.

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

Везет Вам с заказчиком, лунных календарей, или лунно-солнечных от сотворения мира или дня рождения Императора не хотят :)

И не надо думать, что такое 23 Элул 5769 :). Вот уж где дурдом.

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


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

Все уже объяснили, но если замените time_t на unsigned long, то будут работать лучше :) и точно позволит избежать прижизненных разборок....

 

Что за пессимизм? :)

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


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

Что за пессимизм? :)

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

Они не смотрели кино про Маклауда :)

 

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

Спасибо. Проблема вылезла в менюшке установки времени, раз я там уже учел, то буду ждать апокалипсис, как все :)

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


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

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

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

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

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

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

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

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

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

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