Получить разницу во времени с определенного дня

Я пытаюсь найти какую-то полезность в 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.

Другие вопросы по тегам