历法、节日、节气

目录

一,阳历、阴历、公历、农历

1,阳历、阴历

2,公历,农历

二,双历合并

1,组成要素

2,一年

3,一月

4,一日

三,闰法则

1,闰秒

2,闰分

3,闰时

4,闰日、闰日年

5,闰月、闰月年

6,闰法则总结

四,年月日时分秒总结

1,日和公历年

2,秒

3,分、时

4,农历月

5,公历月

6,农历年

五,节假日

1,元旦、春节

2,清明、端午、中秋

3,劳动节、国庆节

六,节气

七,OJ实战

OpenJ_Bailian 2733 判断闰年

力扣 1185. 一周中的第几天


一,阳历、阴历、公历、农历

1,阳历、阴历

阳历主要参考地球和太阳之间的关系,阴历主要参考地球和月亮之间的关系。

2,公历,农历

很多人以为公历和阳历是一个意思,农历和阴历是一个意思。

其实,阳历阴历都是泛指,公历农历都是特指。

公历是一种阳历,世界上还有其他的公历。公历的作用是,让全世界对任意一天都有统一的描述方法,所以没啥技术含量。

农历是一种阴阳历,因为农历是用来指导农作的,而太阳和月亮都对农作物有很大的影响,所以有很高的技术含量,既是阳历也是阴历。

二,双历合并

中国古代发明并使用农历,这是非常强大的一个历法,对于农作指导有很强的意义,这是我们的文化瑰宝(不光是人文,还有很高的科技含量)。

但是又要和世界沟通,所以从20世纪开始引入公历,我们同时使用公历和农历。

那么,该如何合并呢?

1,组成要素

公历和农历都有3个基本尺度,年,月,日。

一年就是从最冷的时候到最冷的时候,一月是月亮最亮的时候到下一次最亮的时候,一日是太阳最亮的时候到下一次最亮的时候。

这个说法虽然不严谨,但却是客观的,也是幼儿园小朋友可以理解的一个简单定义。

所以,无论是很强的农历,还是很简单的公历,组成要素是基本一致的。

实际上:

一年是地球绕太阳一周,公历完全符合,农历的一年稍有区别,

一月是月亮绕地球一周,农历完全符合,公历的一月稍有区别,

一天是地球自转一周,公历和农历都完全符合。

2,一年

引入公历的同时,我们采用公元纪年,公元元年的含义是***,懂的都懂,和农历、和我国可以说没有半毛钱关系。

但是既然公历一年和农历一年是差不多的,所以纪年法也统一了,都用公元纪年。

同时为了方便,公历的2023年1月1日,和农历的1月1日不能相隔太多,而这就需要下文的“闰月法则”。

3,一月

因为1年大约是12个月,1年大约是365天,这2个数值关系也是客观的,所以公历可以简单粗暴的规定1年就等于12个月。

理论上,365天应该分成5个31天和7个30天,而且可以规定1-5月是31天,6-12月是30天,为什么实际上搞这么复杂呢?

这和盖维斯·屋大维·奥古斯都有关,这里就不发散了。

因为实际上1年比12个月要多几天,所以一般公历的一个月都比农历的一个月要长。

而为了保持公历年和农历年的相对同步,农历一年要么是12个月,要么是13个月,参考下文的“闰月法则”。

4,一日

铯-133原子基态的两个超精细结构能级之间跃迁相对应辐射周期的9192631770倍所持续的时间定义为一秒。1分钟等于60秒,1小时等于60分钟。

辐射周期的时间可以理解为绝对客观,是个不变的定值,和太阳、地球、月亮都无关,而用9192631770这个数值是为了保证1日大约等于86400秒,即24小时。

1日是地球自转一周,也是一个客观的时间。

实际上1日和86400秒是有偏差的,参考下文的“闰秒法则”

三,闰法则

1,闰秒

实际上1日比86400秒略大一点,如果放任不管,“日积日累”之后,总误差会很大。

所以每隔一段时间,误差接近1秒,就需要闰秒。

最近一次闰秒在北京时间2017年1月1日7时59分59秒和8时0分0秒之间,在原本相邻的2秒之间插入了一个闰秒。

2,闰分

因为经常闰秒对人类生活造成了麻烦,科学家和政府讨论决定,废除闰秒,改成闰分。

把闰秒的周期拉长60倍,把容忍最大误差改成1分钟,在误差接近1分钟时,实行闰分。

具体规则大概形如:在7时59分和8时0分之间,在原本相邻的2分之间,插入一个闰分。

改成闰分的好处就是,闰的频率下降了60倍。

3,闰时

也有人提议不采用闰分,直接采用闰时,这样,闰的频率将再度下降24倍。

目前应该还没有采用,所以闰秒、闰分、闰时是一个三选一的关系,不会同时存在于一套规则中。

4,闰日、闰日年

1年约为365.2422日,而公历采用1年365日,所以存在误差。

大约每4年,误差累积就会达到1日,所以大约每 4年就有1个闰日年,这一年实行闰日,即2月有29天,非闰日年有28天。

闰日年简称闰年,但是其中的闰规则指的是闰日。

详细规则:

能被4整除的是闰年,但能被100整除的不是闰年,但能被400整除的是闰年, 但能被3200整除的不是闰年,所以每3200年有800-32+8-1=775个闰年。

而0.2422*3200=775.04

5,闰月、闰月年

为了保持公历年和农历年的相对同步,农历一年要么是12个月,要么是13个月。

在农历十九年中,有十二个平年,为一平年十二个月;有七个闰月年,每一闰月年十三个月。

也就是说,一公历年/一农历月 大约是235/19

6,闰法则总结

闰法则的作用是调整不同时间单位之间的比例不是整数的问题,理论上每个闰法则都是正闰和负闰,但根据目前人类采用的数值,只需要正闰法则。

四,年月日时分秒总结

现在,我们可以把这个世界上的每一秒,都盘点清楚了。让我们从头捋一遍!

1,日和公历年

1日是地球自转一周的平均时间,1公历年是地球公转一周的平均时间,这2个时间是客观的固定值。

某种程度上,可以说这2个是仅有的有实际客观意义的时间单位。

解决日和公历年之间的非整数倍问题,需要闰日法则。

2,秒

1秒是铯-133原子基态的两个超精细结构能级之间跃迁相对应辐射周期的9192631770倍,

其中辐射周期的时间客观的固定值,而用9192631770这个数值是为了保证1日大约等于86400秒。

3,分、时

1分等于60秒,1小时等于60分,这是为了方便凭空创造的单位,没有误差。

因为1日大约等于86400秒,所以1日大约等于24小时。

秒、分、时是三位一体的,日和秒分时之间的非整数倍问题,需要闰法则,闰秒闰分闰时三选一。

4,农历月

农历1月是月亮公转一周的平均时间。

因为每个农历月的天数并不固定,所以不需要解决非整数倍问题。

5,公历月

公历月仅仅只是把每个公历年分成12份而已。

6,农历年

因为每个农历年的天数并不固定,所以不需要解决非整数倍问题。

而每个农历年都是由12个或13个农历月组成,需要闰月法则。

至此,年月日时分秒就全部清清楚楚了。

五,节假日

每年有7个节假日,一共11天假。

1,元旦、春节

本来只有1个节日的,自从同时引入公历之后,把传统节日元旦一分为二,一个是公历1月1日元旦,一个是农历1月1日春节。

元旦1天假,春节3天假(春节和后面2天)。

2,清明、端午、中秋

这3个是传统节日,分别是清明节气当日、农历端午当日、农历中秋当日。

3个都是1天假。

3,劳动节、国庆节

这2个公历节日,不是传统节日,分别是5月1日、10月1日。

劳动节1天假,国庆节3天假(国庆和后面2天)。

六,节气

现行的“二十四节气”来自于三百多年前(1645年起沿用至今)订立的根据太阳在回归黄道上的位置来确定节气的方法,即在一个为360度圆周的“黄道”(一年当中太阳在天球上的视路径)上,划分为24等份,每15°为1等份。

七,OJ实战

OpenJ_Bailian 2733 判断闰年

题目:

Description

判断某年是否是闰年。
Input

输入只有一行,包含一个整数a(0 < a < 3000)
Output

一行,如果公元a年是闰年输出Y,否则输出N
Sample Input

2006
Sample Output

N
Hint

公历纪年法中,能被4整除的大多是闰年,但能被100整除而不能被400整除的年份不是闰年, 能被3200整除的也不是闰年,如1900年是平年,2000年是闰年,3200年不是闰年。

代码:

#include<iostream>
using namespace std;
 
char f(int n)
{
	if (n % 4)return 'N';
	if (n % 100)return 'Y';
	if (n % 400)return 'N';
	//if (n % 3200)
		return 'Y';
	//return 'N';
}
 
int main()
{
	int a;
	cin >> a;
	cout << f(a) << endl;
	return 0;
}

力扣 1154. 一年中的第几天

class Solution {
public:
    int dayOfYear(string s) {
        int year = (s[0]-'0')*1000+(s[1]-'0')*100+(s[2]-'0')*10+(s[3]-'0');
        int month = (s[5]-'0')*10+(s[6]-'0');
        int day = (s[8]-'0')*10+(s[9]-'0');
        return dayOfYear(year,month,day);
    }
    int dayOfYear(int year,int month,int day){
        vector<int>m={31,28,31,30,31,30,31,31,30,31,30,31};
        int s=day;
        for(int i=0;i<month-1;i++)s+=m[i];
        if(run(year)&&month>2)s++;
        return s;
    }
    bool run(int n)
    {
        if (n % 4)return false;
        if (n % 100)return true;
        if (n % 400)return false;
        return true;
    }
};

力扣 1185. 一周中的第几天

给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。

输入为三个整数:daymonth 和 year,分别表示日、月、年。

您返回的结果必须是这几个值中的一个 {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}

示例 1:

输入:day = 31, month = 8, year = 2019
输出:"Saturday"

示例 2:

输入:day = 18, month = 7, year = 1999
输出:"Sunday"

示例 3:

输入:day = 15, month = 8, year = 1993
输出:"Sunday"

提示:

  • 给出的日期一定是在 1971 到 2100 年之间的有效日期。
class Solution {
public:
    string dayOfTheWeek(int day, int month, int year) {
        vector<string>v={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
        int s=dayOfYear(year,month,day);
        for(int i=1970;i<year;i++)s+=run(i)?366:365;
        return v[(s+3)%7];
    }
    int dayOfYear(int year,int month,int day){
        vector<int>m={31,28,31,30,31,30,31,31,30,31,30,31};
        int s=day;
        for(int i=0;i<month-1;i++)s+=m[i];
        if(run(year)&&month>2)s++;
        return s;
    }
    bool run(int n)
    {
        if (n % 4)return false;
        if (n % 100)return true;
        if (n % 400)return false;
        return true;
    }

};

内容概要:本文详细探讨了制造业工厂中两条交叉轨道(红色紫色)上的自动导引车(AGV)调度问题。系统包含2辆红色轨道AGV1辆紫色轨道AGV,它们需完成100个运输任务。文章首先介绍了AGV系统的背景目标,即最小化所有任务的完成时间,同时考虑轨道方向性、冲突避免、安全间隔等约束条件。随后,文章展示了Python代码实现,涵盖了轨道网络建模、AGV初始化、任务调度核心逻辑、电池管理模拟运行等多个方面。为了优化调度效果,文中还提出了冲突避免机制增强、精确轨道建模、充电策略优化以及综合调度算法等改进措施。最后,文章通过可视化与结果分析,进一步验证了调度系统的有效性可行性。 适合人群:具备一定编程基础对自动化物流系统感兴趣的工程师、研究人员及学生。 使用场景及目标:①适用于制造业工厂中多AGV调度系统的开发与优化;②帮助理解实现复杂的AGV调度算法,提高任务完成效率系统可靠性;③通过代码实例学习如何构建优化AGV调度模型,掌握冲突避免、路径规划电池管理等关键技术。 其他说明:此资源不仅提供了详细的代码实现理论分析,还包括了可视化工具性能评估方法,使读者能够在实践中更好地理解应用AGV调度技术。此外,文章还强调了任务特征分析的重要性,并提出了基于任务特征的动态调度策略,以应对高峰时段卸载站拥堵等情况。
内容概要:本文介绍了一个使用MATLAB编写的基于FDTD(时域有限差分)方法的电磁波在自由空间中传播的仿真系统。该系统采用了ABC(吸收边界条件)正弦脉冲激励源,并附有详细的代码注释。文中首先介绍了关键参数的选择依据及其重要性,如空间步长(dx)时间步长(dt),并解释了它们对算法稳定性精度的影响。接着阐述了电场磁场的初始化以及Yee网格的布局方式,强调了电场磁场分量在网格中的交错排列。然后详细讲解了吸收边界的实现方法,指出其简单而有效的特性,并提醒了调整衰减系数时需要注意的问题。最后,描述了正弦脉冲激励源的设计思路,包括脉冲中心时间宽度的选择,以及如何将高斯包络与正弦振荡相结合以确保频带集中。此外,还展示了时间步进循环的具体步骤,说明了磁场电场分量的更新顺序及其背后的物理意义。 适合人群:对电磁波传播模拟感兴趣的科研人员、高校学生及工程技术人员,尤其是那些希望深入了解FDTD方法及其具体实现的人群。 使用场景及目标:适用于教学演示、学术研究技术开发等领域,旨在帮助使用者掌握FDTD方法的基本原理实际应用,为后续深入研究打下坚实基础。 阅读建议:由于本文涉及较多的专业术语技术细节,建议读者提前熟悉相关背景知识,如电磁理论、MATLAB编程等。同时,可以通过动手实践代码来加深理解记忆。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值