Я пытаюсь сделать программу, которая распечатывает сообщения после определенной даты. Что-то вроде архива. Например, сегодня он должен распечатать только «привет». На следующий день он должен распечатать «мир». Но он все равно должен распечатать «привет», так как я уже прошел дату, когда «привет» уже должен быть напечатан.
Я уверен, что вы можете сделать это с некоторыми базовыми условиями if и просто сравнить значения внутри struct tm
с локальным временем, но я думаю, что есть более быстрый и эффективный способ сделать это. Метод условия if
также использует смехотворно длинный код. Я попытался просмотреть stackoverflow и нашел метод difftime
. Проблема в том, что параметры difftime
double difftime(time_t time1, time_t time0)
и я не знаю, как инициализировать локальное время в одном из них и конкретную дату в другом.
Итак, короче, мои вопросы:
Как установить конкретную дату в переменную time_t?
Как мне установить переменную time_t в
localtime
(если вы собираетесь использовать методstruct tm localtime = *localtime(&time_t)
, не могли бы вы сказать мне, как преобразовать переменную struct обратно в переменнуюtime_t
, чтобы я мог вставить ее в параметрыdifftime
)?
struct tm localtime = *localtime(&time_t);
не является допустимым C. Вы можете использоватьtime_t whenever = 0; struct tm lt = *localtime(&whenever);
, чтобы получить дату/время, близкие к эпохе Unix — 1970-01-01 00:00:00 +00:00 — или вы можете использовать более традиционный вариант и использоватьtime_t whenever = 0; struct time *lt = localtime(&whenever);
(но вы можете предпочесть назначить, чтобы избежать проблем с другими вызовами функций преобразования времени, или вы можете использовать реентерабельные версии, такие какtime_t whenever = 0; struct tm lt; localtime_t(&whenever, <);
. - person Jonathan Leffler   schedule 11.05.2015