You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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,提问作者Τζιότι

火山引擎 最新活动