如何使用SimpleDateFormat计算距明日剩余时间并格式化为HH:mm形式
Java 实现计算距明天剩余时长并按HH:mm格式化
实现逻辑
整个实现分三步完成:
- 取当前系统时间戳,同时基于当前时间计算次日0点的时间戳
- 两个时间戳做差,得到当前距离明天的剩余毫秒数
- 用
SimpleDateFormat做格式化时,必须指定GMT时区规避本地时区偏移问题,最终输出HH:mm格式的结果
可直接运行的代码示例
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; public class RemainingTimeUtil { public static void main(String[] args) { // 获取当前时间 long currentTs = System.currentTimeMillis(); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(currentTs); // 计算次日0点的时间戳 calendar.add(Calendar.DAY_OF_YEAR, 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); long tomorrowZeroTs = calendar.getTimeInMillis(); // 计算剩余毫秒差值 long remainMs = tomorrowZeroTs - currentTs; // 格式化输出,强制指定GMT时区避免本地时区导致的时间偏差 SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm"); timeFormat.setTimeZone(TimeZone.getTimeZone("GMT")); String formattedRemainTime = timeFormat.format(new Date(remainMs)); System.out.println("距离明天剩余时长:" + formattedRemainTime); } }
关键注意事项
- 格式化时如果不指定GMT时区,
SimpleDateFormat会默认用系统本地时区做时间换算,比如东八区环境下,剩余1小时的结果会被错误格式化为09:00,和实际值偏差8小时 - 计算次日0点时记得把秒、毫秒字段置0,避免出现秒级、毫秒级的精度误差
- 因为距离次日0点的剩余时长最多不超过24小时,用
HH:mm格式完全可以覆盖所有场景,不会出现格式溢出问题
内容的提问来源于stack exchange,提问作者md sohan
相关产品推荐
相关产品推荐

