Как проверить дату и время в C

66
11

У меня есть следующий код:

int main(void) {
struct tm str_time;
time_t time_of_day;

str_time.tm_year = 2012-1900;
str_time.tm_mon = 6;
str_time.tm_mday = 5;
str_time.tm_hour = 10;
str_time.tm_min = 3;
str_time.tm_sec = 5;
str_time.tm_isdst = 0;

time_of_day = mktime(&str_time);
printf(ctime(&time_of_day));

return 0;
}

Он отлично работает, но я не могу найти способ проверить, что дата и время в коде совпадают с компьютером, есть ли у кого-нибудь представление о том, как сравнивать обе даты?

спросил(а) 2021-01-19T13:29:27+03:00 9 месяцев, 1 неделя назад
1
Решение
79

... есть представление о том, как сравнивать обе даты?

OP делает 3 вещи, которые способствуют разнице во времени.

Код может не заполнить все необходимые поля перед вызовом mktime(&str_time); , C задает не менее 9 полей. Лучше всего на нуль заполнить str_time а затем установить 7 полей. Это относительно редкая проблема.

OP комментариев о дате "2016-06-25 06:58:31". Тем не менее, не следует использовать значения для заполнения struct tm. Обычный неправильный код состоит в том, что tm_mon - это месяцы с января, поэтому необходим минус 1.

str_time.tm_year = 2016-1900;
str_time.tm_mon = 6 - 1;
str_time.tm_mday = 25;
str_time.tm_hour = 6;
str_time.tm_min = 58;
str_time.tm_sec = 31;
str_time.tm_isdst = tbd; // see below

str_time.tm_isdst = 0; устанавливает метку времени без дневного сбережения. Часто лучше использовать str_time.tm_isdst = -1; и пусть система определит, действовал ли DST.

Вместо того, чтобы вычислять time_t для данного пользователя год-месяц-день, рекомендуем взять компьютерное время и преобразовать его в год-месяц-день, а затем сравнить. Конечно, любые различия/расхождения будут легче понять.

Чтобы сравнить компьютерный год-месяц-день с пользователем

// February 20, 2016
int y = 2016;
int m = 2;
int d = 20;

time_t now;
if (time(&now) == -1) Handle_Error();
struct tm *tm = localtime(&now);
if (tm == NULL) Handle_Error();

if (((tm->tm_year + 1900) == y) && ((tm->tm_mon + 1) == m) && (tm->tm_mday == d)) {
puts("Dates match");
}

ответил(а) 2021-01-19T13:29:27+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема