• SimpleDateFormat中的一些奇异的事情


    java.text在java类库中用于格式化,查询和处理文本。

    那java.text.SimpleDateFormat 位于java类库 java.text下,用来格式化时间。

    我们也经常使用到:

    SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    的语句来格式化时间。

    在SimpleDateFormat中‘H’的大写代表24小时制,而‘h’代表12小时制。

    但是在SimpleDateFormat中有一件奇异的事情下来dodo就来谈谈:

    dodo写了一段代码,是这样的:

    在这段代码当中,dodo使用到的格式化时间“YYYY-MM-dd HH:mm:ss”。输出的结果却令人大吃一惊,发现时间和自己要格式化的时间有很多的差异,那么怎么会造成这样的事情呢。

    dodo将时间格式化的时间样式换为“yyyy-MM-dd HH:mm:ss”。输出的结果却是符合要求的。

    那么到底大写的“YYYY-MM-dd HH:mm:ss” 和小写的“yyyy-MM-dd HH:mm:ss”

    有什么区别,还是这是一种API上的bug。

    我们看官方的解释是这样的:

     A week year is in sync with a WEEK_OF_YEAR cycle. All weeks between the first and last weeks (inclusive) have the same week year value. Therefore, the first and last days of a week year may have different calendar year values. 

            开发人员误用的格式符代表的是一种不同的日历系统。现行的公历通常被称为格里高利历(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.text.SimpleDateFormat 的时候大家一定要谨慎!!!

  • 相关阅读:
    全网最新iOS面试题-大厂加薪篇
    iOS面试--虎牙最新iOS开发面试题
    iOS面试--字节跳动最新iOS开发面试题
    去面试腾讯iOS开发要达到咋样的水准?
    “iOS开发” 金三银四如何快速技术晋升?
    突破瓶颈,“iOS开发”,跳槽面试必备题(针对年后面试者)
    解决visio对象在word中显示不全的问题
    word中图片自动编号的交叉引用出现被引用的图片
    elasticsearch 一个分布式多用户能力的全文搜索引擎
    Maven仓库安装配置及使用
  • 原文地址:https://www.cnblogs.com/zhaixingzhu/p/12569142.html
Copyright © 2020-2023  润新知