获取特定日期的时差

Get time difference from specific day

本文关键字:时差 日期 获取      更新时间:2023-10-16

我试图在chrono名称空间中找到一些实用程序,以向我的应用程序提供我在C#程序中具有的相同功能。我需要做的是计算两个特定日期之间的时差,但我找不到这么具体的东西。例如,下面是我的c#代码:

var startDate = new DateTime(2000, 1, 1);
int diffDays = (DateTime.Today.Date - startDate.Date).Days;
return diffDays.ToString();

C++中是否存在等效函数

// 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自己尝试。