21xrx.com
2024-12-23 03:13:14 Monday
登录
文章检索 我的文章 写文章
C++中如何表示某个时间段的起始日期和结束日期
2023-07-01 09:42:39 深夜i     --     --
C++ 时间段 起始日期 结束日期 表示

    return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;

在C++中,表示某个时间段的起始日期和结束日期可以通过两种常用的方式实现:使用time_t类型和自定义结构体。

第一种方式是使用time_t类型。time_t是C/C++标准库中定义的一种类型,它表示从1970年1月1日0时0分0秒到现在的秒数。通过将起始日期和结束日期分别转换为对应的time_t值,我们就可以通过简单的数值比较来判断它们的顺序以及时间差。

具体实现代码如下:


#include <iostream>

#include <ctime>

using namespace std;

int main()

{

  struct tm start = 121; // 2021-01-01

  struct tm end = 31; // 2021-12-31

  time_t start_time = mktime(&start);

  time_t end_time = mktime(&end);

  if (start_time > end_time)

    cout << "Invalid time period" << endl;

   else {

    cout << "Start date: " << asctime(gmtime(&start_time));

    cout << "End date: " << asctime(gmtime(&end_time));

    cout << "Time period in seconds: " << end_time - start_time << endl;

  }

  return 0;

}

第二种方式是使用自定义结构体。我们可以定义一个包含年、月、日等成员变量的结构体,然后通过重载运算符实现时间段的比较和计算。

具体实现代码如下:


#include <iostream>

using namespace std;

struct Date {

  int year;

  int month;

  int day;

  Date(int year_, int month_, int day_)

    : year(year_), month(month_), day(day_) {}

  bool operator<(const Date& rhs) const {

    if (year != rhs.year)

      return year < rhs.year;

    

    if (month != rhs.month)

      return month < rhs.month;

    

    return day < rhs.day;

  }

  int operator-(const Date& rhs) const {

    int total_days = 0;

    for (int y = rhs.year; y < year; y++) {

      total_days += is_leap_year(y) ? 366 : 365;

    }

    for (int m = 1; m < month; m++) {

      total_days += days_in_month(year, m);

    }

    total_days += day - 1;

    for (int m = 1; m < rhs.month; m++) {

      total_days -= days_in_month(rhs.year, m);

    }

    total_days -= rhs.day - 1;

    return total_days;

  }

private:

  bool is_leap_year(int year) const {

    return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;

  }

  int days_in_month(int year, int month) const {

    static const int days[13] = 31;

    int days_in_feb = (month == 2 && is_leap_year(year)) ? 29 : 28;

    return days[month] + (month == 2 ? days_in_feb : 0);

  }

};

int main()

{

  Date start(2021, 1, 1);

  Date end(2021, 12, 31);

  if (start < end)

    cout << "Start date: " << start.year << "-" << start.month << "-" << start.day << endl;

    cout << "End date: " << end.year << "-" << end.month << "-" << end.day << endl;

    cout << "Time period in days: " << end - start << endl;

   else

    cout << "Invalid time period" << endl;

  

  return 0;

}

以上两种方式都有各自的优缺点,具体应该根据项目需求和个人喜好来选择。无论哪种方式,我们都需要对时间的相关知识有一定的了解,这样才能正确地表示和计算时间段。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复