美文网首页
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