Java时间转换
我也尝试了一种不同的算法,用减法代替模Java时间转换,java,time,Java,Time,我也尝试了一种不同的算法,用减法代替模 3719 1:1:59 3720 1:1:0 7325 1:1:0 Scanner input2=新的扫描仪(System.in); System.out.println(“转换为hh:mm:ss:”)的时间; int time=input2.nextInt(); int hr=0,min=0,sec=0; 如果(时间>=3600) { hr++; 时间-=3600; } 如果(时间>=60) { 时间-=60; min++; } 如果(时间=360
3719
1:1:59
3720
1:1:0
7325
1:1:0
Scanner input2=新的扫描仪(System.in);
System.out.println(“转换为hh:mm:ss:”)的时间;
int time=input2.nextInt();
int hr=0,min=0,sec=0;
如果(时间>=3600)
{
hr++;
时间-=3600;
}
如果(时间>=60)
{
时间-=60;
min++;
}
如果(时间<60)
{
秒+=时间;
}
系统输出打印项次(hr+“:“+min+”:“+sec);
这是因为在最小值中使用3600的模数:
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);
但您必须使用60,将其更改为:
if (time >= 60) {
min = time / 60;
time = time % 3600;
}
publicstaticvoidmain(字符串[]args){
扫描仪输入2=新扫描仪(System.in);
System.out.println(“转换为hh:mm:ss:”)的时间;
int time=input2.nextInt();
int hr=0,min=0,sec=0;
如果(时间>=3600){
hr=时间/3600;
时间=时间%3600;
}
如果(时间>=60){
min=时间/60;
时间=时间%60;
}
如果(时间<60){
秒+=时间;
}
系统输出打印项次(hr+“:“+min+”:“+sec);
}
它会像你期望的那样工作
在这里检查它这是因为您在min
中使用3600的模数:
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);
但您必须使用60,将其更改为:
if (time >= 60) {
min = time / 60;
time = time % 3600;
}
publicstaticvoidmain(字符串[]args){
扫描仪输入2=新扫描仪(System.in);
System.out.println(“转换为hh:mm:ss:”)的时间;
int time=input2.nextInt();
int hr=0,min=0,sec=0;
如果(时间>=3600){
hr=时间/3600;
时间=时间%3600;
}
如果(时间>=60){
min=时间/60;
时间=时间%60;
}
如果(时间<60){
秒+=时间;
}
系统输出打印项次(hr+“:“+min+”:“+sec);
}
它会像你期望的那样工作
在这里检查它让我们避免重新发明轮子,只需使用适当的图案作为下一步:
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);
}
让我们避免重新发明轮子,只需使用适当的模式,如下所示:
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);
}
您的第二个算法可以工作,尽管它应该使用while
而不是if
,这样它可以多次递增
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)));
Scanner input2=新的扫描仪(System.in);
System.out.println(“转换为hh:mm:ss:”)的时间;
int time=input2.nextInt();
int hr=0,min=0,sec=0;
而(时间>=3600)
{
hr++;
时间-=3600;
}
而(时间>=60)
{
时间-=60;
min++;
}
同时(时间<60)
{
秒+=时间;
}
系统输出打印项次(hr+“:“+min+”:“+sec);
您的第二个算法可以工作,尽管它应该使用while
而不是if
,以便它可以多次递增
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)));
Scanner input2=新的扫描仪(System.in);
System.out.println(“转换为hh:mm:ss:”)的时间;
int time=input2.nextInt();
int hr=0,min=0,sec=0;
而(时间>=3600)
{
hr++;
时间-=3600;
}
而(时间>=60)
{
时间-=60;
min++;
}
同时(时间<60)
{
秒+=时间;
}
系统输出打印项次(hr+“:“+min+”:“+sec);
而不是:
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);
应该有:
if(time >= 60)
{
time = time%3600;
min = time/60;
}
也可以跳过if条件并添加前导零:
if(time >= 60)
{
min = time/60;
time = time%60;
}
而不是:
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);
应该有:
if(time >= 60)
{
time = time%3600;
min = time/60;
}
也可以跳过if条件并添加前导零:
if(time >= 60)
{
min = time/60;
time = time%60;
}
tl;博士
PT2H2M5S
细节
答案是正确的,解决了数学问题
仅供参考,java.time类可以为您完成这项数学工作
ISO 8601
此外,不建议以hh:mm:ss
格式将时间跨度作为字符串进行跟踪。这种格式会产生歧义,因为它看起来像一天中的某个时间。该标准为日期时间值定义了许多合理的明确格式。一段时间内未附加到时间线的时间称为:PnYnMnDTnHnMnS
。P
标记开始,而T
将年、月、日和时、分、秒分开。例如,“P3Y6M4DT12H30M5S”表示“三年六个月四天十二小时三十分钟五秒”的持续时间。一分钟半是PT1M30S
在解析/生成字符串时,java.time类默认使用ISO 8601格式
java.time.Duration
java.time中的Duration
类表示总秒数的时间跨度和纳秒数的小数点
Duration.ofSeconds ( 7_325L ).toString()
PT1H1M59S
接下来是一个更大的数字
Duration d = Duration.ofSeconds( 3_719L );
String output = d.toString();
PT2H2M5S
在Java8中,这个类莫名其妙地缺少用于不同部分的getter方法,例如小时数、分钟数和秒数。通过添加getPart
方法在Java9中进行了修正
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如java.util.date
,.Calendar
,&java.text.SimpleDateFormat
该项目现已启动,建议迁移到java.time
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释
大部分java.time功能都在中向后移植到java 6和7,并进一步适应于中(请参阅)
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如Interval
、YearWeek
、YearQuarter
,等等;博士
PT2H2M5S
细节
答案是正确的,解决了数学问题
仅供参考,java.time类可以为您完成这项数学工作
ISO 8601
此外,不建议以hh:mm:ss
格式将时间跨度作为字符串进行跟踪。这种格式会产生歧义,因为它看起来像一天中的某个时间。该标准为日期时间值定义了许多合理的明确格式。一段时间内未附加到时间线的时间称为:PnYnMnDTnHnMnS
。P
标记开始,而T
将年、月、日和时、分、秒分开。例如,“P3Y6M4DT12H30M5S”报告