各位看官们大家好,上一回中咱们说的例子是"如何创建垂直版SeekBar",本章回中介绍的例子是" 毫秒时间转换为日期时间"。闲话休提,言归正转,让我们一起Talk Android吧!
概念介绍
本章回中说的毫秒时间是指通过System.currentTimeMillis()方法获取的时间,它的时间单位是毫秒,因此我们称它为毫秒时间,也有些地方叫时间戳,叫法不同,本质相同。而日期时间是指年,月,日,时,分,秒这种格式的时间。本章回将介绍如何把毫秒时间转换成日期时间。
转换方法
格式化
我们首先想到的方法是创建一个Date类型的对象,然后创建日期时间格式,比如时分秒,然后再使用日期格式来格式化Date对象,经过代码验证后发现,该方法得到的日期时间是基于1970年计算的,它得到的是从1970开始的日期时间。而我们想要的是日期时间的间隔,比如给了一个毫秒值,把它转换成x天x时x分x秒,这里的x是计算后后的数值,比如19天5时,这种日期时间表示19天5小时,而不是1980-3-5这种日期,它表示1980年3月5日。
作差法
我们准备使用作差法来计算日期时间,其思路就是把毫秒时间转换为革个时间单位,然后减去该单位上一级时间单位的时间,比如我们把时间转换为分钟,然后减去小时中包含的分钟和天中包含的分钟,这样就得到了分钟数。这里面天和小时是分钟的上一级时间单位。如果大家不理解的话可以查看示例代码。
示例代码
long temp = 1000*60*60*24*3;
// DateFormat formatter = new SimpleDateFormat("HH:mm:ss");
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = new Date(TimeUnit.MILLISECONDS.toMillis(temp));
String formattedTime = formatter.format(date);
System.out.println(formattedTime);
temp = 1000*60*60*24*0 + 1000*60*60*23 + 1000*60*44 + 1000*55;
long days = TimeUnit.MILLISECONDS.toDays(temp);
long hours = TimeUnit.MILLISECONDS.toHours(temp) - TimeUnit.DAYS.toHours(days);
long minutes = TimeUnit.MILLISECONDS.toMinutes(temp) - TimeUnit.DAYS.toMinutes(days) - TimeUnit.HOURS.toMinutes(hours);
long seconds = TimeUnit.MILLISECONDS.toSeconds(temp) - TimeUnit.DAYS.toSeconds(days) - TimeUnit.HOURS.toSeconds(hours) - TimeUnit.MINUTES.toSeconds(minutes);
/*
long hours = TimeUnit.MILLISECONDS.toHours(temp) - TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(temp));
long minutes = TimeUnit.MILLISECONDS.toMinutes(temp) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(temp));
long seconds = TimeUnit.MILLISECONDS.toSeconds(temp) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(temp));
*/
System.out.println("day: "+days+" HH: "+hours+" MM: "+minutes+" SS: "+seconds);
在示例代码中,我们演示了格式化转换方法和作差转化方法的代码,编译并且运行上面的程序可以得到以下结果:
1970-01-04 00:00:00
day: 0 HH: 23 MM: 44 SS: 55
看官们,关于"毫秒时间转换为日期时间"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!