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. HIVE JOIN_1

    HIVE JOIN 概述 Hive join的实现包含了: Common (Reduce-side) Join Broadcast (Map-side) Join Bucket Map Join So ...

  2. OPENCV(4) —— ImgProc

    2D图像滤波器基础类BaseFilter:dst(x,y) = F(src(x,y), src(x+1,y)... src(x+wdith-1,y), src(y+1,x)... src(x+widt ...

  3. 手把手教你在VMware虚拟机中安装Ubuntu14.04系统

    在VMware中创建完虚拟机之后,一般需要给虚拟机安装系统,比较受青睐的系统有Ubuntu和Centos,关于Centos系统的安装之前已经写过了,感兴趣的小伙伴可以戳这篇文章:靠谱的centos7. ...

  4. ES6特性-对比两个值是否相等

    因为JavaScript中有语言缺陷,所以出了个Object.is()

  5. Metro界面的真正意义

    昨天去客户那给安装防火墙和交换机,因为客户和我们公司签订了维保的合同,然后我们公司两个人去了客户那跟客户沟通也去顺路去做巡检. 客户之前跟我们公司采购了一台DELL的PC服务器,预装了win serv ...

  6. Mysql学习总结(9)——MySql视图原理讲解与使用大全

    一. 视图概述 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且 ...

  7. 解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)

    问题 如下: 2017-07-16 08:50:57.436  INFO 13524 --- [           main] c.p.p.web.PointshopWebApplication   ...

  8. [Python] Handle Exceptions to prevent crashes in Python

    Exceptions cause your application to crash. Handling them allows you to recover gracefully and keep ...

  9. 一步一步跟我学hadoop(1)----hadoop概述和安装配置

    这几年云计算大数据非常火,借这个东风.今天開始学习apache的分布式计算框架hadoop,希望不要太落后. Hadoop说明 对于hadoop.apache官方wiki给出的说明为 Apache H ...

  10. 使用无线局域网(WLAN)更需要注意加强安全防范

           下面链接介绍对WLAN的安全加密部分的内容,主要对WinAircrackPack工具的在Wlan方面的应用分析,介绍常见几种的加密方式,以及再使用无线设备时候的注意事项.650) thi ...