美文网首页
SimpleDateFormat 时间

SimpleDateFormat 时间

作者: Dapengyou | 来源:发表于2022-12-01 11:14 被阅读0次

    通常是从第三方接口返回的时间格式为 yyyy-MM-dd'T'HH:mm:ss.SSSXXX,这个是UTC日期格式

    模版转化

    2021-02-16T15:00+08:00 模版形式是 yyyy-MM-dd'T'HH:mmXXX

    yyyy-MM-dd'T'HH:mmXXX 中的 XXX 是什么意思

    X指时区。除了大写的 X 代表时区外,大小写的 Z 也代表时区,根据表达式的不同选用不同的时区代表符号

    示例可以查看SimpleDateFormat 文档

    那要用几个 X 呢

    以东八区为例,
    使用一个 X 显示的是 +08
    使用两个 X 显示的是 +0800
    使用三个 X 显示的是 +08:00

    根据提供的数据情况,选用对应的 X 个数

    修改系统时区

    时间格式yyyy-MM-dd‘T‘HH:mm 转换为HH:mm

    思路:先使用 parse 将 String 型的时间转换为 Date 型,再创建需要转化的目标模版,再使用 format 将 Date 型转换为 String 型,得到的 String 型就是最终转化完成的日期形式

     Date date = null;
     try {
             date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm").parse("2021-02-16T15:00");
      } catch (ParseException e) {
             e.printStackTrace();
      }
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
            
    //format将Date型转换为String型,parse将String型转换为Date型
    String UTCDate = sdf.format(date);
    Log.d(TAG,UTCDate); 
    
    输出结果
    15:00
    

    如果不考虑时区,以上转换就完成了,如果要考虑时区,那么还需要使用到setTimeZone,一般默认用的是本地设备设置的时区,我测试的时候设备选择的时区是东 8 区

    String time = "2021-02-16T15:00+04:00";
     Date date = null;
     try {
             date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmXXX").parse(time);
      } catch (Exception e) {
             e.printStackTrace();
      } 
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mmXXX");
    //sdf.setTimeZone(TimeZone.getTimeZone("GMT" + time.substring(time.length() - 6))); 
    //format将Date型转换为String型,parse将String型转换为Date型
    String UTCDate = sdf.format(date);
    Log.d(TAG,UTCDate); 
    

    上面代码将获取到的时间改成了东 4 区,根据间隔一个区,增长或减少一个小时原则,可以推测出东 8 区时间是:19:00,东 4 区时间是:15:00

    输出结果
    19:00+08:00
    
    将 setTimeZone 放出后,输出结果
    15:00+04:00
    

    小 tip:
    java如何实现当前时间加减30分钟的方法

    相关文章

      网友评论

          本文标题:SimpleDateFormat 时间

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