【c++】日期类相关实践:计算日期到天数转换、日期差值

2024-09-01 03:04

本文主要是介绍【c++】日期类相关实践:计算日期到天数转换、日期差值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 相关文章:日期类(运算符重载应用)详细版


目录

前言

实践1:计算日期到天数转换

题目

方法

关键代码

完整代码

实践2:日期差值

题目

方法

关键代码

完整代码 

💗感谢阅读!💗


前言

在上篇文章中(【c++】类与对象实践:日期类(运算符重载应用)详细版),我们对日期类进行一个完整的实现!

那么接下来我们可以学以致用,完成下列题目!

计算日期到天数转换_牛客题霸_牛客网

日期差值_牛客题霸_牛客网 (nowcoder.com)

实践1:计算日期到天数转换

题目

​​​​​计算日期到天数转换_牛客题霸_牛客网 (nowcoder.com)

方法

获取每月天数  int GetMonthDays(int year, int month) ;

判断闰年:

不能被100整除能被4整除 或 能被400整除。
平年二月28天;
闰年29天。
1 3 5 7 8 10 12 月有31天
4 6 9 11 月有30天

日期类中实现的前置++重载, Date& operator++() ;

日期类中实现的工具方法,日期差值计算  int operator-(const Date& d) const ;

关键代码

int GetMonthDays(int year, int month) {static int monthDays[13] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))return 29;elsereturn monthDays[month];}Date& operator++() {*this += 1;return *this;}int operator-(const Date& d) const {Date max = *this;Date min = d;int flag = 1;int cnt = 0;if (*this < d) {max = d;min = *this;flag = -1;}while (min != max) {++cnt;++min;}return cnt * flag;}int TheDayOfYear() {return (*this - Date(_year, 1, 1)) + 1;}

完整代码

#include <iostream>
using namespace std;
class Date {public:Date(int year = 0, int month = 0, int day = 0) {_year = year;_month = month;_day = day;}bool operator>(const Date& d) const {if (this->_year > d._year)return true;else if (this->_year == d._year && this->_month > d._month)return true;else if (this->_year == d._year && this->_month == d._month &&this->_day > d._day)return true;elsereturn false;}bool operator==(const Date& d) const {if (this->_year == d._year&& this->_month == d._month&& this->_day == d._day)return true;elsereturn false;}bool operator!=(const Date& d) const {return !(*this == d);}bool operator<(const Date& d) const {return !(*this > d || *this == d);}Date& operator-=(int day) {if (day < 0) {*this += -day;return *this;}_day -= day;while (_day <= 0) {_month--;if (_month == 0) {_month = 12;_year--;}_day += GetMonthDays(_year, _month);}return *this;}Date& operator+=(int day) {if (day < 0) {*this -= -day;return *this;}_day += day;while (_day > GetMonthDays(_year, _month)) {_day -= GetMonthDays(_year, _month);_month++;if (_month == 13) {_month = 1;_year++;}}return *this;}int GetMonthDays(int year, int month) {static int monthDays[13] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))return 29;elsereturn monthDays[month];}Date& operator++() {*this += 1;return *this;}int operator-(const Date& d) const {Date max = *this;Date min = d;int flag = 1;int cnt = 0;if (*this < d) {max = d;min = *this;flag = -1;}while (min != max) {++cnt;++min;}return cnt * flag;}int TheDayOfYear() {return (*this - Date(_year, 1, 1)) + 1;}private:int _year;int _month;int _day;
};int main() {int year, month, day;while (cin >> year >> month >> day) {Date d(year, month, day);cout << d.TheDayOfYear() << endl;}return 0;
}

实践2:日期差值

题目

日期差值_牛客题霸_牛客网 (nowcoder.com)

方法

轻而易举,在日期类中,我们已经实现了对于计算日期差值的工具方法。

对于这道题目,我们可以直接套用!!

关键代码

 void getDaynums(const Date& d) {Date max = d;Date min = *this;if (!(max > min)) {max = *this;min = d;}int day = 0;while (min != max) {min++;day++;}day++;cout << day << endl;}

完整代码 

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;class Date {private:int  _year;int _day;int _month = 0;int getMonthDay(int year, int month) {int monthArr[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//闰年 二月不同if (month == 2 && ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))) {return 29;}return monthArr[month];}public:Date(int year, int month, int day) : _year(year), _month(month), _day(day) {  }bool operator>(const Date& d) {if (_year > d._year) {return true;} else if (_year == d._year && _month > d._month) {return true;} else if (_year == d._year && _month == d._month && _day > d._day) {return true;}return false;}bool operator==(const Date& d) {if (_year == d._year && _month == d._month && _day == d._day) {return true;}return false;}Date& operator-=(int day) {if (day < 0) {return *this += (-day);}_day -= day;while (_day < 0) {_month--;if (_month == 0) {_month = 12;_year--;}_day += getMonthDay(_year, _month);}return *this;}bool operator != (const Date& d) {if (*this == d)return false;return true;}Date& operator+=(int day) {// a+=b,a本身变化了,因此最后返回aif (day < 0) {return *this -= day;}_day += day;while (_day > getMonthDay(_year, _month)) { //天数已经超过当前月份_day -= getMonthDay(_year, _month);_month++;if (_month > 12) {_year++;_month = 1;}}return *this;}Date operator++(int) {Date temp(*this);*this += 1;return temp;}void getDaynums(const Date& d) {Date max = d;Date min = *this;if (!(max > min)) {max = *this;min = d;}int day = 0;while (min != max) {min++;day++;}day++;cout << day << endl;}};int main() {int day1, day2, mon1, mon2, year1, year2;scanf("%4d%2d%2d", &year1, &mon1, &day1);scanf("%4d%2d%2d", &year2, &mon2, &day2);Date d(year1, mon1, day1);Date d2(year2, mon2, day2);d.getDaynums(d2);
}
// 64 位输出请用 printf("%lld")

💗感谢阅读!💗


这篇关于【c++】日期类相关实践:计算日期到天数转换、日期差值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125765

相关文章

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function

基于C#实现将图片转换为PDF文档

《基于C#实现将图片转换为PDF文档》将图片(JPG、PNG)转换为PDF文件可以帮助我们更好地保存和分享图片,所以本文将介绍如何使用C#将JPG/PNG图片转换为PDF文档,需要的可以参考下... 目录介绍C# 将单张图片转换为PDF文档C# 将多张图片转换到一个PDF文档介绍将图片(JPG、PNG)转

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<