Android技术问题:如何获取未来时间及给毫秒级过去时间加n小时
嘿,我来帮你搞定这两个Android时间操作问题~刚好你之前看过按天添加的示例,其实按小时操作的思路是相通的,下面给你详细的实现方案:
一、获取未来时间值
这里提供两种兼容不同Android版本的实现方式:
1. 兼容低版本(API < 26):使用Calendar类
如果你需要适配Android 8.0以下的系统,Calendar是最稳妥的选择,比如获取当前时间之后n小时的时间:
// 比如要获取3小时后的时间 int hoursToAdd = 3; Calendar calendar = Calendar.getInstance(); // 添加指定小时数,HOUR_OF_DAY是24小时制,避免12小时制的混淆 calendar.add(Calendar.HOUR_OF_DAY, hoursToAdd); // 获取未来时间的毫秒时间戳 long futureMillis = calendar.getTimeInMillis(); // 或者转换成Date对象 Date futureDate = calendar.getTime();
2. 高版本推荐(API >= 26 或启用Desugar):使用Java 8+时间API
Android 8.0及以上支持Java 8的时间API,如果你用的是Android Gradle Plugin 4.0+,也可以通过Desugar让低版本支持。这种方式更简洁且线程安全:
int hoursToAdd = 3; // 获取当前时间,添加n小时 LocalDateTime futureDateTime = LocalDateTime.now().plusHours(hoursToAdd); // 如果需要毫秒时间戳,需要指定时区(比如系统默认时区) long futureMillis = futureDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
二、给毫秒级过去时间添加n小时
针对已经是毫秒数的过去时间,核心是先把毫秒数转换成时间对象,再添加小时,最后按需输出。同样分两种方式:
1. 使用Calendar类
// 假设这是你的过去时间毫秒值 long pastMillis = 1620000000000L; int hoursToAdd = 2; Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(pastMillis); // 同样用HOUR_OF_DAY确保24小时制的正确性 calendar.add(Calendar.HOUR_OF_DAY, hoursToAdd); // 获取添加后的毫秒时间戳 long newMillis = calendar.getTimeInMillis(); // 或者转换成Date对象 Date newDate = calendar.getTime();
2. 使用Java 8+时间API
long pastMillis = 1620000000000L; int hoursToAdd = 2; // 把毫秒数转换成Instant,添加n小时 Instant newInstant = Instant.ofEpochMilli(pastMillis).plusHours(hoursToAdd); // 获取新的毫秒时间戳 long newMillis = newInstant.toEpochMilli(); // 如果需要转换成带时区的日期时间 LocalDateTime newDateTime = LocalDateTime.ofInstant(newInstant, ZoneId.systemDefault());
小贴士:如果你之前看的按天添加示例,本质上只是把
Calendar.DAY_OF_MONTH换成了Calendar.HOUR_OF_DAY,或者把plusDays()换成plusHours(),核心逻辑是一致的~
内容的提问来源于stack exchange,提问作者Τζιότι




