美文网首页
SimpleDateFormat使用简单记录

SimpleDateFormat使用简单记录

作者: 梧叶已秋声 | 来源:发表于2020-06-06 09:10 被阅读0次

    当修改系统时间显示格式,从12小时制修改为24小时制,使用new SimpleDateFormat("hh:mm", Locale.getDefault(Locale.Category.FORMAT)).format(date)new SimpleDateFormat("HH:MM", Locale.getDefault(Locale.Category.FORMAT)).format(date),解析同一个时间戳数值的时候会发生错误,时间不准。

    例如定义一个时间数据。 private String time = "1591148797690";//这是个时间戳数据的string
    系统时间显示设置为12小时制的时候(此时使用 new SimpleDateFormat("hh:mm", Locale.getDefault(Locale.Category.FORMAT)).format(new Date(Long.parseLong(time))))结果为9:46。这是准确的时间,但是手动将时间显示调制24小时制后,使用 new SimpleDateFormat("HH:MM", Locale.getDefault(Locale.Category.FORMAT)).format(new Date(Long.parseLong(time))),结果为09:06。这个时间是有问题的。
    //HH:MM表示24小时制时间,hh:mm表示12小时制时间。

    出处:时间系列之各种时间的意义
    1970年的1月1日(GMT或UTC时间),这一天是计算机的创世纪之日,用小说里面的话说:这天是一个新的纪元的开始。Unix时间戳就是从那天起到现在的秒数。

    当解析同一个时间戳时间的时候出现了不同的结果,显然问题出在SimpleDateFormat的使用。
    原本的思路是使用
    if (android.text.format.DateFormat.is24HourFormat(mContext))
    判断系统是使用12小时制还是24小时制,再去判断使用HH:MM或hh:mm去进行数据转换。但是new SimpleDateFormat使用无论如何还是存在问题时间转换不准的问题。

    最后发现如果使用 SimpleDateFormat.getTimeInstance().format(date)则不会有此问题。

    但是这样格式跟之前不一致,会多个秒,例如24小时制时结果为09:46:37getTimeInstance()的参数选DateFormat.SHORT即可。
    即调用SimpleDateFormat.getTimeInstance(DateFormat.SHORT).format(date)。或者DateFormat.getTimeInstance(DateFormat.SHORT).format(date)也可以。SimpleDateFormat继承自DateFormat
    这里还有一个问题,12小时制的时候会多个AMPM,调用getTimeInstance(DateFormat.SHORT)后结果为9:46 AM,如果非得要求显示9:46的话,可以调用substring去处理数据。

    private String mString12 = "9:46 AM";
    if (mString12.contains("M")){
        String  substring = mString12.substring(0, mString12.indexOf("M")-2);
        Log.d("MainActivity","substring = " + substring);
    }
    

    log如下:

    D/MainActivity: substring = 9:46
    

    总结:使用SimpleDateFormat的时候,应尽量使用getXXXInstance去调用,而不是new SimpleDateFormatgetXXXInstance更安全。

    参考链接:
    时间系列之各种时间的意义
    深入理解Java:SimpleDateFormat安全的时间格式化
    Java中Long、String、Date 类型之间的转换
    Java中的DateFormat用法举例

    相关文章

      网友评论

          本文标题:SimpleDateFormat使用简单记录

          本文链接:https://www.haomeiwen.com/subject/qxwbzhtx.html