Java 将秒转换为小时、分钟和秒?

Java 将秒转换为小时、分钟和秒?,java,Java,所以我想做一个程序,可以把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.prin

所以我想做一个程序,可以把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 ");
  }
}
好的,所以我必须将s,m,h初始化为0,因为如果不是的话,我在if语句中遇到了问题,所以我把它设置为0,因为我可以稍后更改:)好的。所以这个程序现在的问题是,如果我输入3603,我得到这个输出:3603s=1h60m3603s,如果我输入3600,我得到这个:
3600s=1小时60米3600s,但输出应分别为3603s=1小时0米3s和3600s=1小时0米0s。有关于如何解决这个问题的提示/建议/解决方案吗D提前谢谢

您从未更改
s
的值。快速解决方法是
s=s-(h*3600+m*60)


编辑:
t=s-(h*3600+m*60)

每次设置较低的项时,尝试从第一项中减去

class Test{
  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;
      s = s- m*60;
    } if(m>=60){
      h=m/60;
      m = m - h*60;
    }
    System.out.println(s + "s = " + h + " h " + m + " m " + s + "s ");
  }
}

顺便说一下,记得关闭
输入
扫描仪!类似这样:
input.close()
靠近程序末尾。

您可以在一行中完成所有操作:

System.out.println((s/3600) + ' hours ' + ((s/60)%60) + ' minutes ' + (s%60) + ' seconds');
使用此代码:

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
int s_input=0;
System.out.println("how many seconds?");
s_input=input.nextInt();
s=s_input%60;
if(s >= 60){

m=s_input/60;
}if(m>=60){

h=m/60;
m=m%60;
}
System.out.println(s + "s = " + h + " h " + m + " m " + s + "s ");
 }
}
你应该试试这个

import java.util.Scanner;
public class Time_converter {


    public static void main(String[] args) 
    {

        Scanner input = new Scanner (System.in);
        int seconds;
        int minutes ;
        int hours;
        System.out.print("Enter the number of seconds : ");
        seconds = input.nextInt();
        hours = seconds / 3600;
        minutes = (seconds%3600)/60;
        int seconds_output = (seconds% 3600)%60;


        System.out.println("The time entered in hours,minutes and seconds is:");
        System.out.println(hours  + " hours :" + minutes + " minutes:" + seconds_output +" seconds"); 
    }

}
我的解决办法是:

 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);
}
字符串扇区时间(整数秒){
整数秒=秒%60;
整数分钟=秒/60;
如果(分钟>=60){
整小时=分钟/60;
分钟%=60;
返回时间+“:”+(分钟<10?“0”+分钟:分钟)+“:”+(秒<10?“0”+秒:秒);
}
返回分钟+“:”+(秒<10?“0”+秒:秒);
}

Java8为日期和时间操作带来了一个很棒的API

import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class Converter {

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");

    public String convert(int seconds) {
        LocalTime time = LocalTime.MIN.plusSeconds(seconds).toLocalTime();

        return formatter.format(time);
    }
}
基本上,这段代码将秒数添加到支持的最小日期时间中,这自然会使HH:mm:ss等于00:00:00


由于您只对时间感兴趣,您可以通过调用toLocalTime()来提取它,并根据需要格式化它。

显然,您正在做一些功课/练习来学习Java。但仅供参考,在实际工作中,您不需要进行这些计算和操作。这是一门课

java.time.Duration 在一段时间内,使用该类。你不必做数学题

Duration d = Duration.ofSeconds( s );
表示未附加到时间轴的时间跨度的字符串的标准格式与所需的输出非常接近:
PnYnMnDTnHnMnS
,其中p标记开始,T将任何年、月、日与任何时、分、秒分隔开。所以一个半小时是
PT1H30M

在解析或生成字符串时,java.time类默认使用ISO 8601格式

String output = d.toString() ;
在Java 9和更高版本中,可以调用
to…Part
方法来检索小时、分钟和秒的各个部分


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

该项目现已启动,建议迁移到类

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类。Hibernate5和JPA2.2支持java.time

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • 带来了一些小功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • Android(26+)的更高版本捆绑了java.time类的实现
    • 对于早期的Android(
      上课时间{
      公共静态void main(字符串参数[]){
      int持续时间=1500;
      字符串testDuration=“”;
      如果(持续时间<60){
      testDuration=持续时间+分钟;
      }
      否则{
      
      如果((持续时间/60)一个更简单的解决方案是:

      T = in.nextInt();
      
      int s = T%60;
      
      int minute = T/60;
      
      int m = minute%60;
      
      int h = minute/60;
      
      return h+"h"+m+"m"+s+"s";
      

      你发布的代码都是左对齐的,无法读取。我已尝试修复此问题。将来,请自己修复此问题。如果我们无法读取你的代码,我们无法理解它,也无法提供帮助。真棒的人,我尝试过此方法,但问题是现在我理解正确了,但如果我键入3600,它会说0s=1h 0m 0s?我需要额外进行va吗变量还是什么?然后将
      s
      更改为其他类似
      t
      。谢谢你!顺便说一句,它的t=s+(h*3600+m*60)不是t=s-(h*3600+m*60):为什么不直接转到
      LocalTime
      而不使用
      LocalDateTime
      LocalTime.MIN.plusHours(h).plusMinutes(m).plusSeconds(s)
      在这种情况下,不需要使用
      DateTimeFormatter
      。所需的输出是标准的ISO 8601格式。java.time类在解析和生成字符串时默认使用ISO 8601格式。
      myLocalTime.toString()
      因此整个代码可以简化为:
      LocalTime.MIN.plusHours(h).plusMinutes(m).plusSeconds(s).toString()
      不需要子例程。@BasilBourque,你说得对。我刚刚更新了代码。关于格式化程序,尽管问题要求使用特定格式,但为了完整性,我还是让它来处理,以防其他人对其他格式感兴趣。在块中
      如果(分钟>=60)
      ,它应该是
      hour=minute/60
      。谢谢@pantelissopasakist这假设输入是分钟,您将其转换为天:小时:分钟,这不是问题。您可以轻松修改它以解决确切的问题。请注意,
      Duration
      类需要Android API级别26或更高:如果您仍然需要也许这是一个可能的解决方法:@BrunoBieri我添加了About java.time部分来解决您的Android版本支持问题。
      class time{
          public static void main (String args[]){
              int duration=1500;
               String testDuration = "";
      
              if(duration < 60){
                  testDuration = duration + " minutes";
              }
              else{
      
                  if((duration / 60)<24)
                  {
                      if((duration%60)==0){
                          testDuration = (duration / 60) + " hours";
                      }
                      else{
                  testDuration = (duration / 60) + " hours," + (duration%60) + " minutes";
                      }
                  }
                  else{
      
                      if((duration%60)==0){
                          if(((duration/60)%24)==0){
                              testDuration = ((duration / 24)/60) + " days,";
      
                          }
                          else{
                          testDuration = ((duration / 24)/60) + " days," + (duration/60)%24 +"hours";
                          }
                      }
                          else{
                      testDuration = ((duration / 24)/60) + " days," + (duration/60)%24 +"hours"+ (duration%60) + " minutes";
                          }
                  }
              }
      
              System.out.println(testDuration);
          }
      }
      
      T = in.nextInt();
      
      int s = T%60;
      
      int minute = T/60;
      
      int m = minute%60;
      
      int h = minute/60;
      
      return h+"h"+m+"m"+s+"s";