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
相关产品推荐
相关产品推荐

