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

java和javascript日期校验和闰年问题分析和解决方式的更多相关文章

  1. java和javascript日期详解

    ** java,js日期转换:** <Excerpt in index | 首页摘要> java的各种日期转换 <The rest of contents | 余下全文> 日期 ...

  2. 分享下今天研究的流量上限DDos攻击分析和解决方式

    分享下今天研究的流量上限DDos攻击分析和解决方式 常常听到或者碰到某个站点被攻击.一般都是流量攻击.今天自己写了个程序測下相关的上限,程序仅仅简单做了个get html操作(不包括图片等资源文件). ...

  3. Java Web乱码分析及解决方式(一)——GET请求乱码

    引言:     在进行Web開始时.乱码是我们最常常遇到也是最主要的问题.有经验的程序员非常easy能解决,刚開始学习的人则easy被泥潭困住. 并且非常多时候.我们即使攻克了乱码问题也是不明就里.往 ...

  4. Windows服务器java.exe占用CPU过高问题分析及解决

    最近在测试一个用java语言实现的数据采集接口时发现,接口一旦运行起来,CPU利用率瞬间飙升到85%-95%,一旦停止就恢复到40%以下,这让我不得不面对以前从未关注过的程序性能问题. 在硬着头皮查找 ...

  5. Linux转发性能评估与优化-转发瓶颈分析与解决方式(补遗)

    补遗 关于网络接收的软中断负载均衡,已经有了成熟的方案,可是该方案并不特别适合数据包转发,它对server的小包处理非常好.这就是RPS.我针对RPS做了一个patch.提升了其转发效率. 下面是我转 ...

  6. Linux转发性能评估与优化(转发瓶颈分析与解决方式)

    线速问题 非常多人对这个线速概念存在误解. 觉得所谓线速能力就是路由器/交换机就像一根网线一样. 而这,是不可能的.应该考虑到的一个概念就是延迟. 数据包进入路由器或者交换机,存在一个核心延迟操作,这 ...

  7. Android ListView异步载入图片乱序问题,原因分析及解决方式

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android全部系统自带的控件其中,ListView这个控件算是 ...

  8. 【javascript】浮点数运算问题分析及解决方法

    问题: 在用 js 进行小数四则运算时发现了一个重大问题,比如:0.7 * 0.8 = 0.5599999999999999 分析: 在 js 中只有一种数字类型 Number,而且在 js 中所有的 ...

  9. aliyun oss 文件上传 java.net.SocketTimeoutException Read timed out 问题分析及解决

    upload ClientException Read timed out com.aliyun.openservices.ClientException: Read timed out        ...

随机推荐

  1. Python列表插入字典(转)

    https://blog.csdn.net/qq_29721419/article/details/70310183

  2. Ftp的上传和下载

    百度知道的那个在“ 绑定和SSL设置”模块,选择的是允许 如果一直找不到网页的话,就是这里错了:反正就是牵扯到一堆防火墙的设置(最后我也没搞成) 选择成无就OK了:一切迎刃而解............ ...

  3. 如何把本地的项目推送到github上面去

    前题:本地已经建好了项目,但电脑上没有安装git  (windows 系统) 1.首页从网上下载git 并安装. 2.进入项目所在的文件夹,右键鼠标 3.新建.gitignore文件 touch .g ...

  4. C/C++(C++封装)

    封装 当单一变量无法完成描述需求的时候,结构体类型解决了这一问题.可以将多个类型打包成一体,形成新的类型.这是 c 语言中封装的概念.但是,新类型并不包含,对数据类的操作.所的有操作都是通过函数的方式 ...

  5. JS中部分 Array 对象方法介绍

    1.concat() concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本 <script type="text/javascrip ...

  6. BZOJ3645: Maze(FFT多项式快速幂)

    Description 众维拉先后在中土大陆上创造了精灵.人类以及矮人,其中矮人是生性喜好常年居住在地下的洞穴的存在,他们挖掘矿物甚至宝石,甚至用他们的勤劳勇敢智慧在地底下创造出了辉煌宏大的宫殿,错综 ...

  7. Maven学习总结(19)——深入理解Maven相关配置

    MAVEN2的配置文件有两个settings.xml和pom.xml settings.xml:保存的是本地所有项目所共享的全局配置信息,默认在maven安装目录的conf目录下,如果没有安装mave ...

  8. openfire 开发遇到的些问题

    openfire的 jid    账户名 + '@" + 你的域名      可是当你的账户名中 有大拼音的 时候  就会变成小写   比如     Test  ,  jid  =  tes ...

  9. javascript变量类型及作用域

    javascript变量类型及作用域 一.简介 变量类型 ECMAScript变量可能包含两种不同类型的数据值:基本类型和引用类型. 基本类型 基本类型指的是简单的数据段,5种基本数据类型:undef ...

  10. html --- bootstrap 框架 (栅格系统布局)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...