Java时间类问题:如何让方法接收原始输入并修复elapsed秒数错误
Java时间转换程序问题:总经过秒数未保留原始输入值
问题场景
输入时/分/秒为331 34 674时,程序正确转换显示为19小时45分钟14秒(小时取模24),但调用getSeconds()返回的是71114(对应19h45m14s),而非预期的1194314(对应331h45m14s)。
原因分析
问题源于两个核心逻辑缺陷:
- 构造函数丢失原始输入信息:带时/分/秒参数的构造函数直接对
chHr取模24、对chMin取模60,丢弃了原始输入中超过一天的时长部分;带长整型秒数的构造函数同样对小时取模24,丢失了完整时长信息。 - getSeconds()计算逻辑错误:当前方法仅基于处理后的
chHr、chMin、chSec计算,只能得到一天内的秒数,无法还原原始输入的总时长。
修复方案
新增存储完整总秒数的成员变量,确保保留原始输入的时长信息,同时调整构造函数和getSeconds()的逻辑:
修改后的CHTime类代码
package CHTime; public class CHTime implements Comparable<CHTime> { // 存储完整的总经过秒数,保留原始输入时长 private long totalSeconds; // 显示用的时分秒(处理后范围:0-23/0-59/0-59) private int chHr; private int chMin; private int chSec; // 构造函数:指定时/分/秒 public CHTime(int chHr, int chMin, int chSec) { // 计算并保存完整总秒数 totalSeconds = (long)chHr * 3600 + chMin * 60 + chSec; // 处理显示用的时分秒 this.chSec = chSec % 60; int totalMinutes = chMin + chSec / 60; this.chMin = totalMinutes % 60; int totalHours = chHr + totalMinutes / 60; this.chHr = totalHours % 24; } // 构造函数:指定总经过秒数 public CHTime(long chElapsedTime) { totalSeconds = chElapsedTime; // 处理显示用的时分秒 this.chSec = (int)(chElapsedTime % 60); long totalMinutes = chElapsedTime / 60; this.chMin = (int)(totalMinutes % 60); long totalHours = totalMinutes / 60; this.chHr = (int)(totalHours % 24); } public int getHour() { return chHr; } public int getMinute() { return chMin; } public int getSecond() { return chSec; } // 返回完整的总经过秒数 public long getSeconds() { return totalSeconds; } @Override public String toString() { return chHr + " hours " + chMin + " minutes " + chSec + " seconds"; } @Override public int compareTo(CHTime o) { return Long.compare(this.totalSeconds, o.totalSeconds); } }
关键修改点
- 新增
totalSeconds成员变量,专门存储完整时长,避免依赖处理后的时分秒计算。 - 两个构造函数先计算并保存
totalSeconds,再处理显示用的时分秒(取模得到0-23/0-59范围)。 getSeconds()直接返回totalSeconds,确保返回原始输入对应的总秒数。- 修复原构造函数中未处理分钟进位到小时的逻辑漏洞。
测试验证
输入331 34 674时:
toString()仍显示19 hours 45 minutes 14 secondsgetSeconds()返回1194314,符合预期
输入长整型秒数1194314时:
toString()显示19 hours 45 minutes 14 secondsgetSeconds()返回1194314,正确保留原始输入值
内容的提问来源于stack exchange,提问作者Casey
相关产品推荐
相关产品推荐

