Scanner input2 = new Scanner(System.in);
System.out.println("Time to be converted to hh:mm:ss: ");
int time = input2.nextInt();
int hr = 0, min = 0, sec = 0;
if(time >= 3600)
{
hr = time/3600;
time = time%3600;
}
if(time >= 60)
{
time = time%3600;
min = time/60;
}
if (time < 60)
{
sec += time;
}
System.out.println(hr+":"+min+":"+sec);
所以,我的问题是,只要秒数大于3719,分钟和小时就会停止递增。
示例:
3719
1:1:59
3720
1:1:0
7325
1:1:0
我还尝试了一种不同的算法,使用减法而不是模数
Scanner input2 = new Scanner(System.in);
System.out.println("Time to be converted to hh:mm:ss: ");
int time = input2.nextInt();
int hr = 0, min = 0, sec = 0;
if(time >= 3600)
{
hr ++;
time -=3600;
}
if(time >= 60)
{
time -= 60;
min ++;
}
if (time < 60)
{
sec += time;
}
System.out.println(hr+":"+min+":"+sec);
答案 0 :(得分:2)
那是因为你在min
使用3600模数:
if (time >= 60) {
min = time / 60;
time = time % 3600;
}
但您必须使用60,将其更改为:
public static void main(String[] args) {
Scanner input2 = new Scanner(System.in);
System.out.println("Time to be converted to hh:mm:ss: ");
int time = input2.nextInt();
int hr = 0, min = 0, sec = 0;
if (time >= 3600) {
hr = time / 3600;
time = time % 3600;
}
if (time >= 60) {
min = time / 60;
time = time % 60;
}
if (time < 60) {
sec += time;
}
System.out.println(hr + ":" + min + ":" + sec);
}
它将按预期工作。
答案 1 :(得分:1)
让我们避免重新发明轮子,只需使用适当模式的SimpleDateFormat
作为下一个:
Scanner input2 = new Scanner(System.in);
System.out.println("Time to be converted to hh:mm:ss: ");
int time = input2.nextInt();
// Create the formater
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss");
// Multiply the time in sec by 1000 to get milliseconds
// Then convert the total amount of milliseconds into a Date
// And finally format the date
System.out.println(format.format(new Date(time * 1000L)));
答案 2 :(得分:1)
您的第二个算法将工作,但它应该使用while
而不是if
,以便它可以多次递增。
Scanner input2 = new Scanner(System.in);
System.out.println("Time to be converted to hh:mm:ss: ");
int time = input2.nextInt();
int hr = 0, min = 0, sec = 0;
while(time >= 3600)
{
hr++;
time -= 3600;
}
while(time >= 60)
{
time -= 60;
min++;
}
while(time < 60)
{
sec += time;
}
System.out.println(hr+":"+min+":"+sec);
答案 3 :(得分:1)
而不是:
if(time >= 60)
{
time = time%3600;
min = time/60;
}
应该有:
if(time >= 60)
{
min = time/60;
time = time%60;
}
您也可以跳过if条件并添加前导零:
public final static void main(String[] args) {
Scanner input2 = new Scanner(System.in);
System.out.println("Time to be converted to hh:mm:ss: ");
int time = input2.nextInt();
int hr = 0, min = 0, sec = 0;
hr = time/3600;
time = time%3600;
min = time/60;
sec = time%60;
System.out.println(String.format("%02d:%02d:%02d", hr, min, sec));
}
答案 4 :(得分:1)
Duration.ofSeconds ( 7_325L ).toString()
PT2H2M5S
Answer by DimaSan是正确的,解决了数学问题。
仅供参考,java.time类可以为您完成数学工作。
此外,不建议以格式hh:mm:ss
跟踪时间范围。这种格式会产生歧义,因为它看起来像是一个时间。 ISO 8601标准为日期时间值定义了许多明智的明确格式。未附加到时间轴的时间跨度称为durations:PnYnMnDTnHnMnS
。 P
标记开头,T
将小时 - 月 - 日与小时 - 分 - 秒分开。例如,&#34; P3Y6M4DT12H30M5S&#34;代表&#34;三年,六个月,四天,十二小时,三十分钟和五十秒的持续时间&#34;一分半钟是PT1M30S
。
在解析/生成字符串时,java.time类默认使用ISO 8601格式。
java.time.Duration
java.time中的Duration
类表示以秒为单位的时间跨度和以秒为单位的小数秒。
Duration d = Duration.ofSeconds( 3_719L );
String output = d.toString();
PT1H1M59S
接下来,一个更大的数字。
Duration d = Duration.ofSeconds ( 7_325L );
PT2H2M5S
在Java 8中,这个类莫名其妙地缺少各种部分的getter方法,例如小时数,分钟数和秒数。在Java 9中通过添加getPart
方法进行了补救。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧日期时间类,例如java.util.Date
,.Calendar
和&amp; java.text.SimpleDateFormat
。
现在位于Joda-Time的maintenance mode项目建议迁移到java.time。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。
大部分java.time功能都被反向移植到Java 6&amp; ThreeTen-Backport中的7,并进一步适应Android中的ThreeTenABP(见How to use…)。
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
等。