1.闰年的介绍
地球绕太阳运行周期为365天5小时48分46秒(合365.24219天)即一回归年。公历的平年只有365日,比回归年短约0.2422 日,所余下的时间约为四年累计一天,故四年于2月加1天,使当年的历年长度为366日,这一年就为闰年。
现行公历中每400年有97个闰年。按照每四年一个闰年计算,平均每年就要多算出0.0078天,这样经过四百年就会多算出大约3天来,因此,每四百年中要减少三个闰年。所以规定,公历年份是整百数的,必须是400的倍数的才是闰年,不是400的倍数的,虽然是4的倍数,也是平年,这就是通常所说的:四年一闰,百年不闰,四百年再闰。 例如,2000年是闰年,1900年则是平年。
由于地球的自转速度逐渐降低,而公转速度则相对更加稳定,所以上述的系统经过更长的周期也会发生微小的误差。在长远的将来,针对闰年的微小调整应该不是由预定的系统决定,而是随时不定性的。
既然是这样,在系统开发过程中,是否需要判断几百年后的事情呢?没有太大必要,如果一个系统能够使用几百年,也该寿终正寝了。
2.如何进行日期校验
系统中常有三种做法,第一种是使用语言自身的日期对象特性,第二种就是将日期转换为某一个特定的格式,然后拆分出来年月日,判断年份、月份、日期。两种方法在javascript和java中都适用,第二种方法不推荐。
另外一种,使用正则表达式来校验,正则表达式通常非常复杂,难以理解,这种方法对100倍数闰年校验存在隐患。
2.1 使用日期对象校验
2.1.1.1Javascript的日期对象
将指定的格式日期字符串转换成标准的格式(比如yyyy-mm-dd),对年月日进行拆解,通过年月日参数生产Date(年,月,日)对象,再得到Date对象的年月日,和拆解之后的年月日进行比较,看结果是否一致。
通过Date(年,月,日)创建对象,会自动转换非法日期,比如:传入1月和32号的日期,会自动升级为2月1日,比较年月日不一致说明日期非法。
Date对象的构造方法,月份是从0开始的,0表示1月。参考下表:
代码示例:
2.1.1.2Java的日期对象
Java中提供了丰富的类,可以直接校验日期,如果不能使用java的类库校验自定义的一些日期,也可以自己编写规则进行校验,参考javascript的方法。
更多参考java.util.Date的API
代码示例:
2.2 拆分年月日校验
山寨做法,不推荐使用。
2.3 正则表达式校验
下面这个是摘录自某系统中的正则表达式,格式化之后也很难理解。这个正则表达式只考虑年数是4的倍数的年份,对于100的倍数的则存在问题,比如1900年、2100年就不是闰年,也会校验通过,不能在系统中使用。
支持的格式为:
1)0012/02/29
2)2012/2/29
3)2012 02 29
4)2012 2 01
5)2100 2 1
3.对日期自动升级的说明
通过Date(年,月,日)创建对象,会自动转换非法日期,比如:传入1月和32号的日期,会自动升级为2月1日,比较年月日不一致说明日期非法。
3.1Javascript的转换
代码,参考Javascript的Date API
结果:
3.2Java的转换
代码,参考Java的Date对象API
结果:
2100-3-2
4.开发注意事项
1.系统对于标准的日期输入,尽量使用日期控件,只能选择,不能修改;对于可以手工输入和修改的日期,需要增加校验。
2.有些业务规则跟闰年有关,开发过程中一定要跟业务确认清楚,比如:有效期天数,碰到闰年的情况,每年的天数可能就有一天的差别。
相关推荐
* @param 日期验证,验证的格式有: * "yyyyMM","yyyyMMdd","yyyyMMdd HH:mm:ss", * "yyyy-MM","yyyy-MM-dd","yyyy-MM-dd HH:mm:ss" * "yyyy.MM","yyyy.MM.dd","yyyy.MM.dd HH:mm:ss" * "yyyy/MM","yyyy/MM/dd...
java代码-使用java解决计算闰年的判断的问题的源代码 ——学习参考资料:仅用于个人学习使用!
在编程领域,特别是Java语言中,判断一个年份是否为平年或闰年是一项常见的任务。这涉及到日期和时间处理,通常与...在学习和使用Java进行日期和时间操作时,掌握这些基础知识能够帮助我们更好地应对各种场景下的问题。
在编程领域,闰年的判断是一个常见的任务,尤其是在处理日期和时间相关的算法时。闰年是公历中的特殊年份,为了保持日历年与地球公转周期的同步,每四年会额外增加一天,即2月29日。这个规则最早由罗马皇帝凯撒大帝...
用于判断闰年的java程序,并可测试多个年份直到特定值终止
在Java编程中,闰年的判断是一个常见的练习,它涉及到日期和时间的概念。在这个程序中,我们首先需要了解闰年的规则: 1. 闰年规则:一个年份如果能被4整除但不能被100整除,或者能被400整除,那么这个年份就是闰年...
在编程领域,特别是Java语言中,判断一个年份是否为闰年是一项常见的任务,它涉及到日期和时间的处理。闰年是指比普通年份多出一天的年份,即2月有29天,而非28天。闰年的规则主要有以下几点: 1. **基本规则**:...
在编程领域,闰年的判断是一个基础且常见的任务,特别是在学习编程语言如Java时。闰年是每四年出现一次,除非那一年能被100整除但不能被400整除。这是一个简单的数学规则,但在编程中实现它需要一些逻辑。让我们详细...
利用java编写判断输入的年份是闰年还是平年,小代码
综上所述,这个主题涵盖了解决实际问题的两个基础算法:Java编程中的闰年判断和线性代数中的Gauss消元法。掌握这些知识点对于初学者来说是非常有益的,不仅可以提升编程能力,也能加深对数学原理的理解。
### 正则表达式在日期校验中的应用 #### 一、引言 在软件开发过程中,日期格式的校验是非常常见的需求之一。利用正则表达式进行日期格式的校验,不仅可以提高代码的可读性和简洁性,还能有效地确保输入数据的准确...
本文主要讲解如何使用 JAVA 语言来判断一个日期字符串是否正确,包括判断闰年和日期的正确性。通过本文,初学者可以进一步了解 JAVA 的 IF 循环语句和字符串处理。 一、字符串处理 在本文中,我们使用 substring ...
java,闰年,平年的问题 package com.gem.javabase.day2; import java.util.Scanner; public class Text2 { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out....
用java计算闰年,经典案例,常用于各种程序语言的教学等等呢个
本篇将深入探讨如何使用正则表达式和JavaScript来实现日期校验。 首先,我们来看第一个函数 `isdate`,它主要用于校验日期格式是否正确。这个函数通过正则表达式 `/^(\d{1,4})(-\/)(\d{1,2})\2(\d{1,2})$/` 来匹配...
编写一个DateUtil的类,里面有一个isLeapYear(int year) 的方法,判断输入年份是否是闰年。如果是闰年,返回true,其他返回false。闰年需要满足以下3个条件: 年份必须大于0,且小于等于10000。 年份不能整除100,...
通过阅读和分析这些代码,我们可以更深入地了解如何在JAVA中实现中国日历的闰年判断。对于初学者,这将是一个很好的学习资源,了解如何将理论知识应用到实际编程中。对于有经验的开发者,这可能是一个改进现有农历...
本程序使计算闰年用的,很好用,转为初学Java的人员供其参考学习
JAVA判断闰年程序,需要的同学拿去吧~
java 闰年 程序 学习java必须要学习的经典案例,加油学习把