Member 13349389 Ответов: 3

Как запрограммировать вычитание двух функций даты и получить выход в ДД/ММ/гг?


Две функции даты, такие как
26/04/2016 - 31.08.1998= ДД/ММ / гггг.
Пожалуйста, кто-нибудь запрограммируйте его.
Я попробовал несколько логик, но не преуспел.

Что я уже пробовал:

Я попробовал несколько логик, но не преуспел

3 Ответов

Рейтинг:
1

Jochen Arndt

Сначала вам нужно разобрать входные строки, чтобы получить числовое значение даты, которое можно вычесть. Какая функция синтаксического анализа будет использоваться, зависит от операционной системы и опционально используемого фреймворка.

С Linux вы можете использовать strptime(3) - man-страница Linux[^] и преобразовать полученную struct tm к time_t с помощью mktime(3) - man-страница Linux[^]. Те time_t затем значения могут быть вычитаны и преобразованы обратно в другие типы дат и, наконец, отформатированы в виде строки.

С приложениями Windows и MFC вы можете использовать Класс COleDateTime[^] который обеспечивает ParseDateTime функция, оператор вычитания (существует также версия, возвращающая Класс COleDateTimeSpan[^]), а также функции форматирования.

Обратите внимание также, что вычитание двух дат приводит к временному промежутку, который обычно форматируется не как "ДД/ММ/гг", а как количество дней, месяцев или лет (или комбинация типа "n лет и m дней").

Так что нет смысла предоставлять код, пока вы не рассказали нам об используемой ОС и фреймворке, а также о том, как отображать результат.


Member 13349389

Windows 8 op,
Вывод должен быть в формате ДД/ММ/гггг

Jochen Arndt

С МФЦ?
Чем использовать класс COleDateTime, как было предложено, получите разницу в виде COleDateTimeSpan и получите дни, вызвав функцию GetTotalDays (). Из этого вы можете вычислить годы, месяцы и оставшиеся дни.

Рейтинг:
1
Рейтинг:
1

OriginalGriff

Вы не можете вычесть две даты и получить дату: это логически невозможно.
Когда вы вычитаете две даты, вы получите промежуток времени - несколько лет, месяцев или дней между ними.
Это число дней может представлять что - то-например, ваш возраст, но оно само по себе не является датой, и его нельзя преобразовать в дату, не ссылаясь на другую дату.

Подумайте о том, что вы пытаетесь сделать, и решите, что именно вам нужно - это не сработает.


Nelek

Но вы все равно можете поместить этот промежуток времени в формат dd/mm/yy ;)

Хотя я бы изменил его на "yy, mm, dd".

OriginalGriff

И даже тогда это сбивает с толку!
Я не думаю, что он вообще думал о том, что он пытается сделать...

Nelek

Вообще-то... я тоже