Как разделить дату и время в C ++? - PullRequest
0 голосов
/ 19 марта 2012

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

Я искал в Google и вижу, что есть способ разбить дату на три-четыре части.

Я скопировал этот код и, похоже, он работает.Просто я этого не понимаю.Все форумы, которые я прочитал, тоже мало помогают.Кто-нибудь может мне это объяснить?

time_t t = time(NULL);
tm* timePtr = localtime(&t);

cout << "seconds= " << timePtr->tm_sec << endl;
cout << "minutes = " << timePtr->tm_min << endl;
cout << "hours = " << timePtr->tm_hour << endl;
cout << "day of month = " << timePtr->tm_mday << endl;
cout << "month of year = " << timePtr->tm_mon << endl;
cout << "year = " << timePtr->tm_year + 1900 << endl;
cout << "weekday = " << timePtr->tm_wday << endl;
cout << "day of year = " << timePtr->tm_yday << endl;
cout << "daylight savings = " << timePtr->tm_isdst << endl;

Ответы [ 2 ]

0 голосов
/ 19 марта 2012

В большинстве вычислительных сред даты и время представляют собой единую концепцию. Библиотека времени выполнения C (следовательно, также C ++) предоставляет тип time_t, который измеряет время (и даты) как количество секунд с 1970-01-01T00: 00: 00 UTC.

Функция localtime() принимает значение time_t и преобразует его в поля, подобные календарю, к которым привыкли люди, в соответствии с местным часовым поясом (который получен из компьютера - часовой пояс также можно указать конкретно). Есть еще один очень похожий вызов, gmtime(), который не учитывает местный часовой пояс, но всегда использует часовой пояс UTC, ранее называвшийся GMT.

Чтобы сделать то, что вы хотите, примите от пользователя дату его рождения, время рождения и часовой пояс и преобразуйте это в time_t. Затем вычтите это из текущего time() значения. Разница в количестве секунд, в течение которых они были живы. Чтобы быть дружелюбным, используйте gmtime(), чтобы преобразовать его в годы, месяцы, дни, часы, минуты и секунды.

0 голосов
/ 19 марта 2012

Это не стандартный код C ++.Это (также) код POSIX.

(последний стандарт C ++ 11 дает вам <chrono>, но немногие компиляторы реализуют его; в Linux вам понадобится GCC 4.6 или 4.7; также есть <ctime>)

См. этот ответ на вопрос, очень связанный с вашим.

Что касается время , gettimeofday , localtime , strftime они хорошо написали справочную документацию на странице руководства.Что вы не понимаете?

(следуйте ссылкам, которые я вам дал, и внимательно прочитайте связанные страницы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...