Получить разницу во времени с определенного дня
Я пытаюсь найти какую-то полезность в chrono
пространство имен, чтобы предоставить моему приложению ту же функцию, которую я имел в моем C#
программа. Что мне нужно сделать, так это вычислить разницу во времени между конкретными датами, но я не могу найти ничего такого конкретного. Например, следующий код C#:
var startDate = new DateTime(2000, 1, 1);
int diffDays = (DateTime.Today.Date - startDate.Date).Days;
return diffDays.ToString();
Есть ли эквивалентная функция в C++
?
2 ответа
Решение
// system_clock::from_time_t
#include <iostream>
#include <ctime>
#include <ratio>
#include <chrono>
int main ()
{
using namespace std::chrono;
// create tm with 1/1/2000:
std::tm timeinfo = std::tm();
timeinfo.tm_year = 100; // year: 2000
timeinfo.tm_mon = 0; // month: january
timeinfo.tm_mday = 1; // day: 1st
std::time_t tt = std::mktime (&timeinfo);
system_clock::time_point tp = system_clock::from_time_t (tt);
system_clock::duration d = system_clock::now() - tp;
// convert to number of days:
typedef duration<int,std::ratio<60*60*24>> days_type;
days_type ndays = duration_cast<days_type> (d);
// display result:
std::cout << ndays.count() << " days have passed since 1/1/2000";
std::cout << std::endl;
return 0;
}
Кредиты: http://www.cplusplus.com/reference/chrono/system_clock/from_time_t/
Вот более простой способ сделать это, используя эту библиотеку с открытым исходным кодом только для заголовков:
#include "date.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
auto startDate = 2000_y/jan/1;
auto diffDays = floor<days>(system_clock::now()) - sys_days{startDate};
std::cout << diffDays.count() << '\n';
}
В настоящее время выходы:
6138
Вот ссылка на wandbox, куда вы можете вставить приведенный выше код и попробовать его самостоятельно, используя различные версии gcc и clang.