`
小码哥BASE64
  • 浏览: 124163 次
社区版块
存档分类
最新评论

java和javascript日期校验和闰年问题分析和解决方案

阅读更多

 

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.有些业务规则跟闰年有关,开发过程中一定要跟业务确认清楚,比如:有效期天数,碰到闰年的情况,每年的天数可能就有一天的差别。

 

  • 大小: 33.3 KB
  • 大小: 43.2 KB
  • 大小: 33.4 KB
  • 大小: 59.4 KB
  • 大小: 53.9 KB
  • 大小: 32.9 KB
  • 大小: 12.3 KB
  • 大小: 30.7 KB
  • 大小: 33.4 KB
分享到:
评论

相关推荐

    java代码验证日期格式正则表达式(包含闰年验证)带注释

    * @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解决计算闰年的判断的问题的源代码 ——学习参考资料:仅用于个人学习使用!

    java 判断平闰年

    在编程领域,特别是Java语言中,判断一个年份是否为平年或闰年是一项常见的任务。这涉及到日期和时间处理,通常与...在学习和使用Java进行日期和时间操作时,掌握这些基础知识能够帮助我们更好地应对各种场景下的问题。

    JAVA闰年的判断

    在编程领域,闰年的判断是一个常见的任务,尤其是在处理日期和时间相关的算法时。闰年是公历中的特殊年份,为了保持日历年与地球公转周期的同步,每四年会额外增加一天,即2月29日。这个规则最早由罗马皇帝凯撒大帝...

    java程序可循环判断是否是闰年

    用于判断闰年的java程序,并可测试多个年份直到特定值终止

    编写JAVA程序,判断是否闰年,输出月份天数

    在Java编程中,闰年的判断是一个常见的练习,它涉及到日期和时间的概念。在这个程序中,我们首先需要了解闰年的规则: 1. 闰年规则:一个年份如果能被4整除但不能被100整除,或者能被400整除,那么这个年份就是闰年...

    java 判断输入的年份是否为闰年

    在编程领域,特别是Java语言中,判断一个年份是否为闰年是一项常见的任务,它涉及到日期和时间的处理。闰年是指比普通年份多出一天的年份,即2月有29天,而非28天。闰年的规则主要有以下几点: 1. **基本规则**:...

    判断闰年 java实验

    在编程领域,闰年的判断是一个基础且常见的任务,特别是在学习编程语言如Java时。闰年是每四年出现一次,除非那一年能被100整除但不能被400整除。这是一个简单的数学规则,但在编程中实现它需要一些逻辑。让我们详细...

    java程序判断闰年

    利用java编写判断输入的年份是闰年还是平年,小代码

    Java编程Gauss消元和判断闰年

    综上所述,这个主题涵盖了解决实际问题的两个基础算法:Java编程中的闰年判断和线性代数中的Gauss消元法。掌握这些知识点对于初学者来说是非常有益的,不仅可以提升编程能力,也能加深对数学原理的理解。

    正则表达式(日期校验)

    ### 正则表达式在日期校验中的应用 #### 一、引言 在软件开发过程中,日期格式的校验是非常常见的需求之一。利用正则表达式进行日期格式的校验,不仅可以提高代码的可读性和简洁性,还能有效地确保输入数据的准确...

    JAVA多层IF嵌套-判断闰年及日期是否正确

    本文主要讲解如何使用 JAVA 语言来判断一个日期字符串是否正确,包括判断闰年和日期的正确性。通过本文,初学者可以进一步了解 JAVA 的 IF 循环语句和字符串处理。 一、字符串处理 在本文中,我们使用 substring ...

    java,闰年,平年的问题

    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编写的闰年计算

    用java计算闰年,经典案例,常用于各种程序语言的教学等等呢个

    日期校验相关代码

    本篇将深入探讨如何使用正则表达式和JavaScript来实现日期校验。 首先,我们来看第一个函数 `isdate`,它主要用于校验日期格式是否正确。这个函数通过正则表达式 `/^(\d{1,4})(-\/)(\d{1,2})\2(\d{1,2})$/` 来匹配...

    java使用maven求闰年

    编写一个DateUtil的类,里面有一个isLeapYear(int year) 的方法,判断输入年份是否是闰年。如果是闰年,返回true,其他返回false。闰年需要满足以下3个条件: 年份必须大于0,且小于等于10000。 年份不能整除100,...

    可以实现闰年判断的中国日历

    通过阅读和分析这些代码,我们可以更深入地了解如何在JAVA中实现中国日历的闰年判断。对于初学者,这将是一个很好的学习资源,了解如何将理论知识应用到实际编程中。对于有经验的开发者,这可能是一个改进现有农历...

    计算闰年的参考程序,解决闰年计算

    本程序使计算闰年用的,很好用,转为初学Java的人员供其参考学习

    JAVA判断闰年程序

    JAVA判断闰年程序,需要的同学拿去吧~

    java闰年程序

    java 闰年 程序 学习java必须要学习的经典案例,加油学习把

Global site tag (gtag.js) - Google Analytics