SimpleDateFormat 时间格式化规范

因为同事问到了这个问题,当时我也没有很明确的答案,然后写了下测试然后做下笔记,防止自己忘记,也希望可以为跟我拥有同样疑惑的朋友解惑。

关于 SimpleDateFormat 的非线程安全问题及其解决方案
感觉这篇文章说的还不错,就一起整理到这里了

代码执行时间 2017-05-17 17:28

测试代码如下

public class SimpleDateFormatTest {

    public static void main(String[] args) {
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat();
        format.applyPattern("yyyy-MM-dd ");
        System.out.println(format.format(date));
        format.applyPattern("yyyy-MM-DD ");
        System.out.println(format.format(date));
        format.applyPattern("YYYY-MM-dd ");
        System.out.println(format.format(date));
        format.applyPattern("YYYY-MM-DD ");
        System.out.println(format.format(date));
        format.applyPattern("YYYY-mm-dd :MM");
        System.out.println(format.format(date));
    }
}

可见结果如下

2017-05-17 
2017-05-137 
2017-05-17 
2017-05-137 
2017-28-17 :05

由此可以看出每一个字母在解析的过程中是承担了不同的作用,并不是依赖位置规则的顺序
下面的附录为时间格式化的解析语法

比如最后一个输出的月跟分钟就换了位置,就因为大小写的问题导致的,因为M是月,m是分钟。

    static final int PATTERN_ERA                  =  0; // G
    static final int PATTERN_YEAR                 =  1; // y
    static final int PATTERN_MONTH                =  2; // M
    static final int PATTERN_DAY_OF_MONTH         =  3; // d
    static final int PATTERN_HOUR_OF_DAY1         =  4; // k
    static final int PATTERN_HOUR_OF_DAY0         =  5; // H
    static final int PATTERN_MINUTE               =  6; // m
    static final int PATTERN_SECOND               =  7; // s
    static final int PATTERN_MILLISECOND          =  8; // S
    static final int PATTERN_DAY_OF_WEEK          =  9; // E
    static final int PATTERN_DAY_OF_YEAR          = 10; // D
    static final int PATTERN_DAY_OF_WEEK_IN_MONTH = 11; // F
    static final int PATTERN_WEEK_OF_YEAR         = 12; // w
    static final int PATTERN_WEEK_OF_MONTH        = 13; // W
    static final int PATTERN_AM_PM                = 14; // a
    static final int PATTERN_HOUR1                = 15; // h
    static final int PATTERN_HOUR0                = 16; // K
    static final int PATTERN_ZONE_NAME            = 17; // z
    static final int PATTERN_ZONE_VALUE           = 18; // Z
    static final int PATTERN_WEEK_YEAR            = 19; // Y
    static final int PATTERN_ISO_DAY_OF_WEEK      = 20; // u
    static final int PATTERN_ISO_ZONE             = 21; // X
    static final int PATTERN_MONTH_STANDALONE     = 22; // L
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值