计算两个日期之间的天数

这篇博客主要讨论如何计算两个日期之间的天数差。作者首先分析了不同月份和年份的情况,包括考虑闰年因素。然后给出了一个C++实现的Date类,该类包含计算剩余天数的方法以及一个用于计算两个日期之间天数差的CountDay函数。在代码实现中,特别处理了年份和月份不同的情况,并确保了输入日期的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

碎碎念念

分析

最简单的情况,月份相同

然后是年份相同

最后是年份不同的情况

额外

代码实现


碎碎念念

咋一看题目好像不难啊,实际上还是有点麻烦的,有很多情况需要考虑到啊。

首先是每个月的天数不一样,然后闰年的也不一样,然后是……

仔细想想就傻眼了吧。

分析

对于输入进来的year、month和day,我们分三种情况计算。

最简单的情况,月份相同

直接两个day相减返回完事,从不拖泥带水。

然后是年份相同

首先判断一下是不是闰年,如果是闰年,把2月改成29天。

之后我们一个非常关键的函数必须用上,这个函数我们用来计算从当前日期开始直到过完本年的总天数,就是还有多少天过完这一年,即本年的剩余天数,我们把它暂时叫做remaindays,它的模样具体看代码。

有了这个函数之后呢,年份相同的情况就可以直接通过前一个日期本年剩余天数减去后一个日期本年剩余天数。

最后是年份不同的情况

首先我们先把这一年过完,即先调用remaindays函数计算本年剩余天数吗,然后年份自增直到和后一个年份相等,从整体来看到底差了多少年,差的每一年都来判断是否是闰年,是的话加上366天,不是的话就加上365天,这样一波下来,可以想到我们算多了天数,算多了后一个日期的本年剩余天数,最后把它减去完事。

额外

对于输入进来的前一个日期晚于后一个日期的情况,我们输出错误。

代码实现

#include"iostream"
using namespace std;
class Date
{
	int year, month, day;
public:
	Date(int year,int month,int day) :year(year), month(month), day(day) {}
	bool isleap(int year)
	{
		if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
			return 1;
		return 0;
	}
	int remaindays()
	{
		long days;
		int i,leapyear[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 },normalyear[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
		if (isleap(year))
		{
			days = leapyear[month - 1] - day;
			for (i = month; i < 12; i++)
				days += leapyear[i];
		}
		else
		{
			days = normalyear[month - 1] - day;
			for (i = month; i < 12; i++)
				days += normalyear[i];
		}
		return days;
	}
	friend int CountDay(Date &a,Date &b);
};

int CountDay(Date &a, Date &b)
{
	if (a.year > b.year)
		return -1;
	if (a.year == b.year && a.month > b.month)
		return -1;
	if (a.year == b.year && a.month == b.month && a.day > b.day)
		return -1;
	long daysss = a.remaindays();
	if (a.year < b.year)
	{
		for (int i = a.year+1; i <=b.year; i++)
			if (a.isleap(i))
				daysss += 366;
			else
				daysss += 365;
		daysss -= b.remaindays();
	}
	else if (a.year == b.year)
		daysss = a.remaindays() - b.remaindays();
	else
		daysss= b.day - a.day;
	return daysss;
}
int main()
{
	int year,month,day;
	cin>>year>>month>>day;
	Date a(year,month,day);
	cin>>year>>month>>day;
	Date b(year,month,day);
	if(CountDay(a,b)!=-1)
	cout<<CountDay(a,b)<<endl;
	else
	cout<<"Sorry, I can't do that!"<<endl;
}

### DeepSeek与Notion的集成 #### 集成概述 为了实现DeepSeek与Notion的有效集成,开发者可以利用Notion提供的官方API。通过该API,应用程序能够读取、写入以及更新Notion页面中的内容。这种集成为用户提供了一种强大的方式来自动化工作流程并增强生产力工具的功能。 #### 使用指南 ##### 设置环境变量 首先,确保已安装Python库`requests`用于发送HTTP请求,并设置必要的环境变量以保存Notion API密钥: ```bash pip install requests export NOTION_API_KEY="your_secret_key_here" ``` ##### 获取数据库ID 要操作特定的Notion数据库,需获取其唯一的数据库ID。这可以通过访问Notion网页版,在URL中找到对应的数据库链接获得。 ##### 创建连接函数 创建一个简单的Python脚本文件(例如`notion_integration.py`),定义一个辅助函数来进行认证并向Notion发出请求: ```python import os import requests def notion_request(endpoint, method='GET', payload=None): headers = { "Authorization": f"Bearer {os.getenv('NOTION_API_KEY')}", "Content-Type": "application/json", "Notion-Version": "2021-08-16", # 版本号可能随时间变化而不同 } url = f"https://api.notion.com/v1/{endpoint}" response = requests.request(method, url, json=payload, headers=headers) if not response.ok: raise Exception(f"Notion API error: {response.status_code}, {response.text}") return response.json() ``` ##### 查询现有条目 使用上述定义的帮助器函数查询指定数据库内的所有项: ```python database_id = 'your_database_id' results = notion_request(f"databases/{database_id}/query") for item in results['results']: print(item.get('properties').get('Name').get('title')[0].get('plain_text')) ``` ##### 添加新记录 向目标数据库添加一条新的记录作为示例展示如何推送数据至Notion平台: ```python new_page_data = { "parent": {"database_id": database_id}, "properties": { "Name": {"title": [{"text": {"content": "New Task"}}]}, "Description": {"rich_text": [{"text": {"content": "This is a description."}}]} } } created_page = notion_request("pages", method="POST", payload=new_page_data) print(created_page["url"]) ``` 以上代码片段展示了基本的操作模式——从初始化配置直到执行具体的CRUD命令。对于更复杂的应用场景,则可以根据实际需求调整参数或扩展功能[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员萌芽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值