You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:31:19