Форум программистов, компьютерный форум CyberForum.ru

Найти количество полных лет, прошедших между двумя датами - C++

Войти
Регистрация
Восстановить пароль
 
Zios
0 / 0 / 0
Регистрация: 25.01.2010
Сообщений: 25
11.05.2010, 20:17     Найти количество полных лет, прошедших между двумя датами #1
Даны две даты (число, месяц, год). Найти количество полных лет, прошедших между этими двумя датами.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2010, 20:17     Найти количество полных лет, прошедших между двумя датами
Посмотрите здесь:

C++ Количество лет, месяцев, дней между датами
Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами C++
C++ Определить число часов, прошедших между двумя датами
Рассчитать количество дней, прошедших между двумя датами C++
Вычислить разницу между двумя датами C++
Посчитать количество дней между двумя датами C++
Определить число полных часов и число полных минут, прошедших с начала суток C++
Вычислить количество дней и количество полных лет между двумя датами C++
Вывести разницу в днях между двумя датами C++
Количество дней между двумя датами C++
Вычислить количество дней между двумя датами C++
Определить количество дней между двумя датами C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
usernet009
 Аватар для usernet009
24 / 24 / 1
Регистрация: 28.12.2009
Сообщений: 85
11.05.2010, 20:26     Найти количество полных лет, прошедших между двумя датами #2
Как даны ? Строкой ? Объектом ? Кучкой переменных ?
Day
 Аватар для Day
1151 / 956 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
11.05.2010, 20:34     Найти количество полных лет, прошедших между двумя датами #3
C
1
2
3
4
5
6
7
  int d1, m1, y1, d2, m2, y2;
  if (m1 < m2) R = y2 - y1;
  else if (m1 > m2) R = y2 - y1 - 1;
  else {  // Месяцы равны
     if (d1 <= d2) R = Y2 - y1;
     else             R = y2 - y1 - 1;    
  }
Это общий принцип. Здесь предполагается, что дата-2 > дата-1
А дальше - подстрой под свое представление дат
Zios
0 / 0 / 0
Регистрация: 25.01.2010
Сообщений: 25
11.05.2010, 23:02  [ТС]     Найти количество полных лет, прошедших между двумя датами #4
строкой
Day
 Аватар для Day
1151 / 956 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
11.05.2010, 23:46     Найти количество полных лет, прошедших между двумя датами #5
Цитата Сообщение от Zios Посмотреть сообщение
строкой
Краткость - сестра таланта. Но на разбор даты в виде строки нужно хоть небольшое, но все-таки присутствие и братика.
ИМХО, задача для новичка - хорошая.
Был бы новичком, решил бы неприменно, но увы...
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9384 / 5434 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
12.05.2010, 01:22     Найти количество полных лет, прошедших между двумя датами #6
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
    
#ifndef max
#define max(A, B) ((A) > (B) ? (A) : (B))
#define min(A, B) ((A) < (B) ? (A) : (B))
#endif
    
#define DATE_LEN 16 
 
int parse_date(const char *s, struct tm *d){
    char *p;
    if ( !s || !*s )
        return -1;
    if ( ( d->tm_mday = atoi(s) ) < 1 || d->tm_mday > 31 )
        return -1;
    if ( ! ( p = strchr(s, '-') ) || ! *(++p) )
        return -1;
    if ( ( d->tm_mon = atoi(p) - 1 ) < 0 || d->tm_mon > 11 )
        return -1;
    if ( ! ( p = strchr(p, '-') ) || ! *(++p) )
        return -1;
    if ( ( d->tm_year = atoi(p) ) < 1970 || d->tm_year > 2037 )
        return -1;
    d->tm_year -= 1900;
    
    return 0;
}
 
int main(void){
    char dateStr[DATE_LEN];
    time_t tA, tB, tD;
    struct tm dA, dB;
    
    printf("Input first date in format dd-mm-yyyy : ");
    if ( ! fgets(dateStr, DATE_LEN, stdin) ){
        perror("fgets");
        exit(1);
    }
    memset(&dA, 0, sizeof(struct tm));
    if ( parse_date(dateStr, &dA) ){
        fprintf(stderr, "Can't parse date!\n");
        exit(1);
    }
    if ( ( tA = mktime(&dA) ) == -1 ){
        perror("mktime");
        exit(1);
    }
    
    printf("Input second date in format dd-mm-yyyy : ");
    if ( ! fgets(dateStr, DATE_LEN, stdin) ){
        perror("fgets");
        exit(1);
    }
    memset(&dB, 0, sizeof(struct tm));
    if ( parse_date(dateStr, &dB) ){
        fprintf(stderr, "Can't parse date!\n");
        exit(1);
    }
    if ( ( tB = mktime(&dB) ) == -1 ){
        perror("mktime");
        exit(1);
    }
    
    tD = max(tA, tB) - min(tA, tB);
    
    printf("Years between this dates: %d\n", tD / 60 / 60 / 24 / 365);
    
    exit(0);
}
Yandex
Объявления
12.05.2010, 01:22     Найти количество полных лет, прошедших между двумя датами
Ответ Создать тему
Опции темы

Текущее время: 15:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru