• 历法、节日、节气


    目录

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

    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年不是闰年。

    代码:

    1. #include
    2. using namespace std;
    3. char f(int n)
    4. {
    5. if (n % 4)return 'N';
    6. if (n % 100)return 'Y';
    7. if (n % 400)return 'N';
    8. //if (n % 3200)
    9. return 'Y';
    10. //return 'N';
    11. }
    12. int main()
    13. {
    14. int a;
    15. cin >> a;
    16. cout << f(a) << endl;
    17. return 0;
    18. }

    力扣 1154. 一年中的第几天

    1. class Solution {
    2. public:
    3. int dayOfYear(string s) {
    4. int year = (s[0]-'0')*1000+(s[1]-'0')*100+(s[2]-'0')*10+(s[3]-'0');
    5. int month = (s[5]-'0')*10+(s[6]-'0');
    6. int day = (s[8]-'0')*10+(s[9]-'0');
    7. return dayOfYear(year,month,day);
    8. }
    9. int dayOfYear(int year,int month,int day){
    10. vector<int>m={31,28,31,30,31,30,31,31,30,31,30,31};
    11. int s=day;
    12. for(int i=0;i-1;i++)s+=m[i];
    13. if(run(year)&&month>2)s++;
    14. return s;
    15. }
    16. bool run(int n)
    17. {
    18. if (n % 4)return false;
    19. if (n % 100)return true;
    20. if (n % 400)return false;
    21. return true;
    22. }
    23. };

    力扣 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 年之间的有效日期。
    1. class Solution {
    2. public:
    3. string dayOfTheWeek(int day, int month, int year) {
    4. vectorv={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
    5. int s=dayOfYear(year,month,day);
    6. for(int i=1970;irun(i)?366:365;
    7. return v[(s+3)%7];
    8. }
    9. int dayOfYear(int year,int month,int day){
    10. vector<int>m={31,28,31,30,31,30,31,31,30,31,30,31};
    11. int s=day;
    12. for(int i=0;i-1;i++)s+=m[i];
    13. if(run(year)&&month>2)s++;
    14. return s;
    15. }
    16. bool run(int n)
    17. {
    18. if (n % 4)return false;
    19. if (n % 100)return true;
    20. if (n % 400)return false;
    21. return true;
    22. }
    23. };

  • 相关阅读:
    谁删了服务器?谈VC源码字符集和回车换行注意事项
    聊一聊 golang 的测试与性能调优
    深度学习:YOLO环境搭建
    Fully Convolutional Networks for Semantic Segmentation--论文笔记
    Java代码中如何向HashMap对象中添加(Map集合对象)呢?
    面试官:来说说vue3是怎么处理内置的v-for、v-model等指令?
    Day32.String内存特性(不可变性、实例化方式、字符拼接) -Java常用类#、集合、IO
    Echarts图表跟随父容器的变化自适应
    在C++项目中使用python脚本(四种)常见报错解决
    开源:分享4个非常经典的CMS开源项目
  • 原文地址:https://blog.csdn.net/nameofcsdn/article/details/134172528