
一般是从第三方接口返回的时间格式为 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 显示的是 +08
使用两个 X 显示的是 +0800
使用三个 X 显示的是 +08:00
根据提供的数据情况,选用对应的 X 个数
思路:先使用 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
15:00+04:00
小 tip:
java如何实现当前时间加减30分钟的方法