注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

有你做翅膀,孤单都是坚强

生命中总要经历曲折,或许是我们不愿意,突然到最后走不通,想重新来过,记录每件小事

 
 
 

日志

 
 
关于我
K24

曾经的生涩,曾经的懵懂,曾经的自恋,都随风去吧。。。

网易考拉推荐
 
 

慎用Java日期格式化  

2015-01-05 10:29:19|  分类: @java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

2014年12月29日,Reddit上一条寥寥几语的留言引起了大量的回复,这条留言说道:

今天有可能变成2015年12月,快点修复它。

这条留言实际指向了Twitter上的一个帖子,这个帖子提醒大家,如果使用了YYYY的格式符来格式化日期,那么就有可能用错格式了。

Reddit的一位读者解释说,Twitter由于误用格式符,把当天的日期变成了2015年12月的某天。

那么日期为什么忽然变得不对了?原因是开发人员误用的格式符代表的是一种不同的日历系统。现行的公历通常被称为格里高利历(Gregorian calendar),它以400年为一个周期,在这个周期中,一共有97个闰日,在这种历法的设计中,闰日尽可能均匀地分布在各个年份中,所以一年的长度有两种可能:365天或366天。而本文提到的被错误使用的历法格式,是国际标准ISO 8601所指定的历法。这种历法采用周来纪日,样子看起来是这样的:2009-W53-7。对于格里高利历中的闰日,它也采用“闰周”来表示,所以一年的长度是364或371天。并且它规定,公历一年中第一个周四所在的那个星期,作为一年的第一个星期。这导致了一些很有意思的结果,公历每年元旦前后的几天,年份会和ISO 8601纪年法差一年。比如,2015年的第一个周四是1月1日,所以1月1日所在的那周,就变成了2015年的第一周。代表ISO 8601的格式符是YYYY,注意是大写的,而格里高利历的格式符是小写的yyyy,如果不小心把这两者搞混了,时间就瞬间推移了一年!维基百科上也有词条专门解释ISO 8601。

作为Java开发者,只要搞清楚YYYYyyyy区别,准确地使用两者,就不会出现这种错误。Reddit的评论中也有读者提到,在Joda Time中,使用YYYY是没有问题的。

引用: http://en.wikipedia.org/wiki/ISO_week_date

  评论这张
 
阅读(49)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017