所以我试图制作一个可以将 s 从输入转换为 h、m 和 s 的程序。到目前为止,我的代码如下所示:
import java.util.Scanner;
class q2_5{
public static void main(String args[]){
Scanner input = new Scanner(System.in);
int s=0;//seconds
int m=0;//minutes
int h=0;//hour
System.out.println("how many seconds?");
s=input.nextInt();
if(s >= 60){
m=s/60;
} if(m>=60){
h=m/60;
}
System.out.println(s + "s = " + h + " h " + m + " m " + s + "s ");
}
}
Run Code Online (Sandbox Code Playgroud)
好的,所以我必须将 s,m,h 初始化为 0 因为如果不是我在 if 语句中遇到问题,所以我只是将它设置为 0,因为我以后可以更改它:) 好的。所以这个程序现在的问题是,如果我输入 3603 我得到这个输出:3603s = 1 h 60 m 3603s,如果我输入 3600 我得到这个:3600s = 1 h 60 m 3600s,但输出应该有分别为 3603s = 1h 0m 3s 和 3600s = 1h 0m 0s。关于如何解决这个问题的任何提示/建议/解决方案?:D 提前致谢!
我的解决方案是:
String secToTime(int sec) {
int second = sec % 60;
int minute = sec / 60;
if (minute >= 60) {
int hour = minute / 60;
minute %= 60;
return hour + ":" + (minute < 10 ? "0" + minute : minute) + ":" + (second < 10 ? "0" + second : second);
}
return minute + ":" + (second < 10 ? "0" + second : second);
}
Run Code Online (Sandbox Code Playgroud)
显然,您正在做一些功课/练习来学习 Java。但是仅供参考,在实际工作中,您不需要进行这些计算和操作。有一个课程。
在一段时间内,使用Duration该类。您无需进行数学运算。
Duration d = Duration.ofSeconds( s );
Run Code Online (Sandbox Code Playgroud)
代表未附加到时间线的时间跨度的字符串的标准ISO 8601格式接近您想要的输出:PnYnMnDTnHnMnS其中 P 标记开始,T 将任何年-月-日与任何时-分-秒分开。所以一个半小时是PT1H30M。
java.time 类在解析或生成字符串时默认使用 ISO 8601 格式。
String output = d.toString() ;
Run Code Online (Sandbox Code Playgroud)
在 Java 9 及更高版本中,您可以调用这些to…Part方法来检索小时、分钟和秒的各个部分。
该java.time框架是建立在Java 8和更高版本。这些类取代了麻烦的旧的遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat。
要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范是JSR 310。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
您可以直接与您的数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC 驱动程序。不需要字符串,不需要类。Hibernate 5 & JPA 2.2 支持java.time。java.sql.*
从哪里获得 java.time 类?
| 归档时间: |
|
| 查看次数: |
24721 次 |
| 最近记录: |