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. Spring-MVC:应用上下文webApplicationContext

    一.先说ServletContext javaee标准规定了,servlet容器需要在应用项目启动时,给应用项目初始化一个ServletContext作为公共环境容器存放公共信息.ServletCon ...

  2. HDU 4372 Count the Buildings 组合数学

    题意:有n个点上可能有楼房,从前面可以看到x栋楼,从后面可以看到y栋,问楼的位置有多少种可能. 印象中好像做过这个题,

  3. Tomcat部署项目修改浏览器上猫咪头像

    一.发现问题用tomcat部署项目,在浏览器标签也上发现了tomcat猫咪图.要把这个图修改掉. 二.解决问题apache-tomcat-5.5.28\webapps\ROOT下的ico文件,将需要替 ...

  4. @Html.Raw() 方法输出带有html标签的字符串

    @Html.Raw() 方法输出带有html标签的字符串,如:@Html.Raw("<div style='color:red'>输出字符串</div>") ...

  5. 网络爬虫与web之间的访问授权协议——Robots

    网站的管理者们通常会有这样一种心态:一方面期待百度.Google这样的搜索引擎来抓取网站的内容,另一方面又很厌恶其他来路不明的网络爬虫抓取自己的信息.正是因为这样,才有“好爬虫”.“坏爬虫”这样的说法 ...

  6. 第四次python作业——叶耀宗

    设计题2: 1.参考“三国演义”词频统计程序,实现对红楼梦出场人物的频次统计.2.(可选)将红楼梦出场人物的频次统计结果用词云显示. import jieba excludes = {"什么 ...

  7. ShopNC【B2B2C】多用户电商平台系统,带WAP,微商城,圈子,门户

    <ShopNC[B2B2C]多用户电商平台系统,带WAP,微商城,圈子,门户> 早上发了套ShopNC B2B2C多用户商城2014商业版,带微商城,但不带圈子.WAP.圈子和门户,如今发 ...

  8. iOS 平台上常见的安装包有三种,deb、ipa 和 pxl

    前言:目前 iOS 平台上常见的安装包有三种,deb.ipa 和 pxl. 其中 deb 格式是 Debian 系统(包含 Debian 和 Ubuntu )专属安装包格式,配合 APT 软件管理系统 ...

  9. J2EE之13个规范标准概念

    主要是关于j2EE十三个规范的总结. java基础知识 首先java分为三类:J2ME.J2SE.J2EE. 依据开发软件的大小和量级他们的作用分别不同,J2ME是开发为机顶盒.移动电话和PDA之类嵌 ...

  10. javascript中易犯的错误有哪些

    javascript中易犯的错误有哪些 一.总结 一句话总结: 比如循环中函数的使用 函数中this的指向谁(函数中this的使用) 变量的作用域 1.this.timer = setTimeout( ...