通常是从第三方接口返回的时间格式为 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 也代表时区,根据表达式的不同选用不同的时区代表符号
那要用几个 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分钟的方法
网友评论