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

Android开发:如何计算两个TextView的时间差值并显示在TextView3

解决TextView时间差值计算的问题

我来帮你搞定这个时间差计算的需求~你之前直接取TextView文本转字符串的方式确实容易踩坑,因为字符串本身只是格式化后的展示文本,没法直接用来做时间运算,更稳妥的做法是存储点击按钮时的时间戳(毫秒值),之后通过时间戳差值来计算时间差,再格式化显示到TextView3里。

第一步:声明存储时间戳的变量

在你的Activity或者Fragment里,定义两个全局变量来记录两次点击的时间毫秒值:

private long startTimeMillis; // 记录button1点击时的时间戳
private long endTimeMillis;   // 记录button2点击时的时间戳

第二步:修改button1的点击事件

点击button1时,除了设置TextView的显示文本,还要把当前时间的毫秒值存起来:

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Date currentDate = new Date();
        // 保存当前时间的毫秒值
        startTimeMillis = currentDate.getTime();
        // 格式化时间为HH:mm显示
        String displayTime = new SimpleDateFormat("HH:mm", Locale.US).format(currentDate);
        textView.setText(displayTime);
        
        button1.setVisibility(View.GONE);
        button2.setVisibility(View.VISIBLE);
    }
});

第三步:修改button2的点击事件,计算并显示时间差

点击button2时,同样保存时间戳,然后计算差值,再把差值格式化成你需要的样式(比如几分几秒、几小时几分):

button2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Date currentDate = new Date();
        endTimeMillis = currentDate.getTime();
        String displayTime = new SimpleDateFormat("HH:mm", Locale.US).format(currentDate);
        textView2.setText(displayTime);
        
        // 计算时间差(单位:毫秒)
        long timeDiffMillis = endTimeMillis - startTimeMillis;
        
        // 把毫秒差转换成你需要的格式,这里以「XX分XX秒」为例
        long diffMinutes = timeDiffMillis / (60 * 1000);
        long diffSeconds = (timeDiffMillis % (60 * 1000)) / 1000;
        String diffDisplay = String.format(Locale.US, "%d分%d秒", diffMinutes, diffSeconds);
        
        // 如果需要跨天/小时的格式,比如「XX天XX小时XX分」,可以这样计算:
        // long diffDays = timeDiffMillis / (24 * 60 * 60 * 1000);
        // long diffHours = (timeDiffMillis % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000);
        // long remainingMinutes = (timeDiffMillis % (60 * 60 * 1000)) / (60 * 1000);
        // String diffDisplay = String.format(Locale.US, "%d天%d小时%d分", diffDays, diffHours, remainingMinutes);
        
        // 把结果显示到TextView3
        textView3.setText(diffDisplay);
        
        button1.setVisibility(View.VISIBLE);
        button2.setVisibility(View.GONE);
    }
});

为什么不直接用字符串计算?

直接取TextView的文本(比如"10:30")来拆分小时和分钟,不仅需要额外的字符串处理逻辑,还容易遇到跨小时、跨天的情况(比如23:50到00:10,字符串计算会得到负数),而用时间戳的方式,直接相减就能得到准确的时间差,再转成需要的格式就简单多了,完全不用处理这些边界情况~

内容的提问来源于stack exchange,提问作者Shizzle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:24:33