Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите, как получить разность дат в месяцах? 
:(
    Опции темы
Express55
Дата 8.4.2008, 05:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 21.3.2008

Репутация: нет
Всего: нет



Здравствуйте!

Есть две даты в формате time_t, как при помощи функции difftime получить разность между датами в месяцах?

PM MAIL   Вверх
Express55
Дата 8.4.2008, 06:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 21.3.2008

Репутация: нет
Всего: нет



Вот пишу вот так, получаю дату от пользователя, вторую дата задаю сам, вывожу две даты на экран из формата tm, как бы все ок, после начинаю преобразовывать time_t и получать разницу, в итоге вижу нули. Я так понимаю, что преобразование дат не происходит t_h = mktime (&dt);  t_e = mktime (&dt2);

Может, кто объяснить в чем ошибка?

Код

#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>


int _tmain(int argc, _TCHAR* argv[])
{
    char buffer[44];
    char a[15];
    char b[9];
    unsigned long c;
    char d[128];
    struct tm * timeinfo;
            char buffer2 [80];

     printf ("Vvedite date (dd.mm.yyyy): ");
             scanf ("%s",&d);
             struct tm dt;
             sscanf (d,"%d.%d.%d",&dt.tm_mday, &dt.tm_mon,&dt.tm_year);
     dt.tm_mon--;
     strftime (buffer2,80,"%x\n",&dt);
     printf ("%s\n",buffer2);
     
     struct tm dt2;
     dt2.tm_mday = 23;
     dt2.tm_mon = 8;
     dt2.tm_year = 2008;
     strftime (buffer2,80,"%x\n",&dt2);
     printf ("%s\n",buffer2);
     
     time_t t_h,t_e;
     double dif;
     t_h = mktime (&dt);
     t_e = mktime (&dt2);
     dif = difftime(t_e,t_h);
     printf ( "%f",dif);
     
 return 0;
}

 ! 
archimed7592
Не забываем пользоваться кнопкой "Код" или тэгами [code=xxx][/code]


Это сообщение отредактировал(а) archimed7592 - 8.4.2008, 09:15
PM MAIL   Вверх
Express55
Дата 8.4.2008, 06:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 21.3.2008

Репутация: нет
Всего: нет



Цитата

     t_h = mktime (&dt);
     t_e = mktime (&dt2);


Локальное время не может быть представлено как календарное, t_h, t_e я получаю (NULL)

Как сделать преобразование?
PM MAIL   Вверх
archimed7592
Дата 8.4.2008, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(Express55 @  8.4.2008,  06:02 Найти цитируемый пост)
     dt2.tm_year = 2008;

См. описание структуры tm: http://www.cplusplus.com/reference/clibrary/ctime/tm.html
year должен быть спустя 1900, т.е. что-то вроде этого:
Код

    struct tm * timeinfo;
            char buffer2 [80];
     printf ("Vvedite date (dd.mm.yyyy): ");
             scanf ("%s",&d);
             struct tm dt;
             sscanf (d,"%d.%d.%d",&dt.tm_mday, &dt.tm_mon,&dt.tm_year);
     dt.tm_mon--;
     dt.tm_year -= 1900; // <<========================================
     strftime (buffer2,80,"%x\n",&dt);
     printf ("%s\n",buffer2);
     
     struct tm dt2;
     dt2.tm_mday = 23;
     dt2.tm_mon = 8;
     dt2.tm_year = 2008 - 1900; // <<===================================
     strftime (buffer2,80,"%x\n",&dt2);


Это сообщение отредактировал(а) archimed7592 - 8.4.2008, 09:21


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0408 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.