先看代码,我这里只给出main方法直接跑起来看:
public static void main(String[] args) { long totalDuration = 62907; String audioDuration = null; if (totalDuration >= 0) { SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); // 24小时制 // 1、当前系统默认时区,按时分秒格式化 audioDuration = formatter.format(totalDuration * 1000); System.out.printf("当前时区: %s ", audioDuration); System.out.printf("当前时区与格林尼治相差%s个小时 ", TimeZone.getDefault().getRawOffset() / (3600 * 1000)); // 2、当前系统默认时区转换为GMT时区,按时分秒格式化 audioDuration = formatter.format(totalDuration * 1000 - TimeZone.getDefault().getRawOffset()); System.out.printf("格林尼治时区: %s ", audioDuration); formatter = new SimpleDateFormat("hh:mm:ss"); // 12小时制 // 当前系统默认时区转换为GMT时区,按时分秒格式化 audioDuration = formatter.format(totalDuration * 1000 - TimeZone.getDefault().getRawOffset()); System.out.printf("格林尼治时区: %s ", audioDuration); } }
运行结果:
当前时区: 01:28:27 当前时区与格林尼治相差8个小时 格林尼治时区: 17:28:27 格林尼治时区: 05:28:27
可以看到,当前是中国的北京时区,62907秒转换后是凌晨1点28分27秒,而格林尼治时间晚我们8个小时,所以他们当前才下午5点。
我们这里并不是转换日期,而是把累计起来的秒数转换为时分秒格式,直接计算很明显62907是17小时28分27秒 (直接拿62907去除3600),所以我们不能按当前时区转,也不能按12小时制转,只能按GMT时区的24小时制转。