Calendar 检查闰年的正确表达式

Calendar 检查闰年的正确表达式,calendar,leap-year,Calendar,Leap Year,可能重复: 闰年的确切定义是什么?AFAIK“可被4整除的年份是闰年。但对于世纪年来说,可被400整除的年份是闰年。” 但是这个定义是100,200,300,400。。。。高达1700年不是闰年!但在公历里,它们都是闰年 您还可以尝试在Linux中使用“Call1700”进行验证 因此,闰年的正确算法是: if ( (year % 4 == 0) && ( year <= 1700 || year % 100 != 0 || year % 400 == 0 ))

可能重复:

闰年的确切定义是什么?AFAIK“可被4整除的年份是闰年。但对于世纪年来说,可被400整除的年份是闰年。

但是这个定义是100,200,300,400。。。。高达1700年不是闰年!但在公历里,它们都是闰年

您还可以尝试在Linux中使用“Call1700”进行验证

因此,闰年的正确算法是:

if ( (year % 4 == 0) && ( year <= 1700 || year % 100 != 0 || year % 400 == 0 ))
    printf("%d is a leap year.\n", year);
 else
    printf("%d is not a leap year.\n", year);
if((year%4==0)和&(year请看一看。我将在这里复制一些伪代码以供参考:

if (year modulo 4 is 0) and ((year modulo 100 is not 0) or (year modulo 400 is 0))
       then is_leap_year
else
       not_leap_year
看一看。我将复制一些伪代码以供参考:

if (year modulo 4 is 0) and ((year modulo 100 is not 0) or (year modulo 400 is 0))
       then is_leap_year
else
       not_leap_year

首先,您的算法有点不正确。它更像:

if ( (year % 4 == 0) && ( year % 100 != 0 || year % 400 == 0 ))
    printf("%d is a leap year.\n", year);
 else
    printf("%d is not a leap year.\n", year);
此外,公历直到1582年左右才被采用

编辑:


公历是1582年颁布的,但在不同的时间被不同的国家采用,最晚在1926年的土耳其。

首先,你的算法有点不正确。它更像是:

if ( (year % 4 == 0) && ( year % 100 != 0 || year % 400 == 0 ))
    printf("%d is a leap year.\n", year);
 else
    printf("%d is not a leap year.\n", year);
此外,公历直到1582年左右才被采用

编辑:

公历是1582年颁布的,但在不同的时期被不同的国家采用,直到1926年土耳其才采用

“但这是特定于公历的吗?”

请看这个

由于地球(和月球)的轨道,我们有各种各样的历法,每种历法都有复杂的规则,试图在日和年之间找到合理的匹配

请看这个

请买一份

“但这是特定于公历的吗?”

请看这个

由于地球(和月球)的轨道,我们有各种各样的历法,每种历法都有复杂的规则,试图在日和年之间找到合理的匹配

请看这个


请购买一份

阅读您链接到的网页。1752年9月出现差距的原因是英国将儒略历改为公历,这不是公历上的差距,而是两者之间的差异


您链接到的页面在此之前一直使用儒略历。因此,您用于计算闰年的算法与页面(或英国,或英格兰,尽管在公元100年都不存在)的方式不同1752年以前的计算。

仔细阅读您链接到的网页。1752年9月出现差距的原因是英国从儒略历改为公历,这不是公历上的差距,而是两者之间的差异


您链接到的页面在此之前一直使用儒略历。因此,您用于计算闰年的算法与页面(或英国,或英格兰,尽管在公元100年都不存在)的方式不同计算时间为1752年以前。

我认为将历史日期的概念与日期计算分开是很重要的。历史日期会受到各种政治、社会和技术问题的影响,因此不太适合简单的算法。请参阅f现代公历


在计算日期时,通常的做法是忘记历史,假装现有的系统一直存在并且将永远存在。(除非你是天文学家或某些其他类型的科学家,在这种情况下,你会使用更准确的东西,对历史日期更不感兴趣。)如果您的应用程序都是关于记录的历史日期,那么您需要一种方法来映射这些日期(取决于国家、历史时期等)无论如何,要建立一个更便于计算的通用日期系统。

我认为将历史日期的概念与日期计算分开是很重要的。历史日期会受到各种政治、社会和技术问题的影响,因此不太适合简单的算法。请参阅在采用现代公历方面的差异


在计算日期时,通常的做法是忘记历史,假装现有的系统一直存在并且将永远存在。(除非你是天文学家或某些其他类型的科学家,在这种情况下,你会使用更准确的东西,对历史日期更不感兴趣。)如果您的应用程序都是关于记录的历史日期,那么您需要一种方法来映射这些日期(取决于国家、历史时期等)如果你的平台有一个日期数据类型,你的第一次尝试就是使用它所具有的任何日期表达式和操作功能。通常这些都足够了,你可以省去为支持日期处理库而承担责任的麻烦

因此,你的问题的答案相当于:


如果(存在(“02/29/yyyy.toDate”)…

如果您的平台具有日期数据类型,您的第一次尝试将是使用它所具有的任何日期表达式和操作功能。通常这些就足够了,您可以省去承担支持日期处理库的责任的麻烦

因此,你的问题的答案相当于:


如果(存在(“02/29/yyyy.toDate))…

它在不同的时间在不同的地方被采用。例如,俄罗斯直到20世纪才采用。它在1752年9月在英国被采用,因此这一年是“有趣的”月份,因为当时显示的日历是朱利安而不是格里高利历。这是一个很好的观点。我认为1582年可能是它被提出的年份它在不同的时间在不同的地方被采用。俄国直到20世纪才采用