【问题标题】:Java: convert seconds to minutes, hours and days [duplicate]Java:将秒转换为分钟、小时和天[重复]
【发布时间】:2014-11-12 05:51:53
【问题描述】:

"输出应该是这样的(回显输入是个好主意):您输入了 500,000 秒,即 5 天 18 小时 53 分 20 秒。(5 天 18:53:20小时)

所以你们能告诉我我应该怎么做吗,什么是最简单的理解和做的方法,请帮助大家,我真的被卡住了,他还说“没有硬编码”,我不完全是确定它是什么,但我认为他希望我们为它们分配常量。

【问题讨论】:

标签: java


【解决方案1】:

最简单的方法

    Scanner in = new Scanner(System.in);
    System.out.println("Enter seconds");
    int s = in.nextInt();

    int sec = s % 60;
    int min = (s / 60)%60;
    int hours = (s/60)/60;

    System.out.println(hours + ":" + min + ":" + sec);

【讨论】:

    【解决方案2】:

    一个使用内置@987654321@的例子。

    long uptime = System.currentTimeMillis();
    
    long days = TimeUnit.MILLISECONDS
        .toDays(uptime);
    uptime -= TimeUnit.DAYS.toMillis(days);
    
    long hours = TimeUnit.MILLISECONDS
        .toHours(uptime);
    uptime -= TimeUnit.HOURS.toMillis(hours);
    
    long minutes = TimeUnit.MILLISECONDS
        .toMinutes(uptime);
    uptime -= TimeUnit.MINUTES.toMillis(minutes);
    
    long seconds = TimeUnit.MILLISECONDS
        .toSeconds(uptime);
    

    【讨论】:

    • 就像一个魅力。谢谢:)
    • 如何在 TimeUnit.convert 中恢复 Conversions from finer to coarser granularities truncate, so lose precision
    【解决方案3】:

    应该是这样的:

        public static void calculateTime(long seconds) {
                int day = (int)TimeUnit.SECONDS.toDays(seconds);        
                long hours = TimeUnit.SECONDS.toHours(seconds) - (day *24);
                long minute = TimeUnit.SECONDS.toMinutes(seconds) - (TimeUnit.SECONDS.toHours(seconds)* 60);
                long second = TimeUnit.SECONDS.toSeconds(seconds) - (TimeUnit.SECONDS.toMinutes(seconds) *60);
    
                System.out.println("Day " + day + " Hour " + hours + " Minute " + minute + " Seconds " + second);
    
            }
    

    解释:

    TimeUnit.SECONDS.toHours(seconds) 将让您直接从秒转换为小时,而不考虑天数。 减去您已经获得的天数的小时数,即天*24。你现在有剩余的时间。 分钟和秒也一样。您需要分别减去已经得到的小时和分钟。

    【讨论】:

      【解决方案4】:

      你应该试试这个

      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"); 
          }
      
      }
      

      【讨论】:

        【解决方案5】:

        感谢大家的帮助,我真的很感激,但实际上我做了一些思考并开始编写一些伪代码并想出了这个。

        import java.util.Scanner;
        

        公共类项目{

        public static void main(String[] args) {
        
        
        
        //variable declaration  
        Scanner scan = new Scanner(System.in);
        final int MIN = 60, HRS = 3600, DYS = 84600;
        int input, days, seconds, minutes, hours, rDays, rHours;
        
        //input 
        System.out.println("Enter amount of seconds!");
        input = scan.nextInt();
        
        
        //calculations
        days = input/DYS;
        rDays = input%DYS;
        hours = rDays/HRS;
        rHours = rDays%HRS;
        minutes = rHours/MIN;
        seconds = rHours%MIN;
        
        //output
        if (input >= DYS) {
            System.out.println(input + " seconds equals to " + days + " days " + hours + " hours " + minutes + " minutes " + seconds + " seconds");
        }
        
        else if (input >= HRS && input < DYS) {
            System.out.println(input + " seconds equals to " + hours + " hours " + minutes + " minutes " + seconds + " seconds");
        }
        
        else if (input >= MIN && input < HRS) {
            System.out.println(input + " seconds equals to " + minutes + " minutes " + seconds + " seconds");
        }
        
        else if (input < MIN) {
            System.out.println(input + " seconds equals to seconds");
        }
        
        scan.close();
        
        
        }   
        

        我知道它看起来真的很菜,但请记住,我仍然是新手,不仅是 Java,而且完全是编程,谁知道伪代码实际上真的很有帮助。

        【讨论】:

          【解决方案6】:

          您可以使用 Java 枚举 TimeUnit 来执行您的数学运算并避免任何硬编码值。然后我们可以使用String.format(String, Object...) 和一对StringBuilder(s) 以及DecimalFormat 来构建请求的输出。类似的,

          Scanner scanner = new Scanner(System.in);
          System.out.println("Please enter a number of seconds:");
          String str = scanner.nextLine().replace("\\,", "").trim();
          long secondsIn = Long.parseLong(str);
          long dayCount = TimeUnit.SECONDS.toDays(secondsIn);
          long secondsCount = secondsIn - TimeUnit.DAYS.toSeconds(dayCount);
          long hourCount = TimeUnit.SECONDS.toHours(secondsCount);
          secondsCount -= TimeUnit.HOURS.toSeconds(hourCount);
          long minutesCount = TimeUnit.SECONDS.toMinutes(secondsCount);
          secondsCount -= TimeUnit.MINUTES.toSeconds(minutesCount);
          StringBuilder sb = new StringBuilder();
          sb.append(String.format("%d %s, ", dayCount, (dayCount == 1) ? "day"
                  : "days"));
          StringBuilder sb2 = new StringBuilder();
          sb2.append(sb.toString());
          sb2.append(String.format("%02d:%02d:%02d %s", hourCount, minutesCount,
                  secondsCount, (hourCount == 1) ? "hour" : "hours"));
          sb.append(String.format("%d %s, ", hourCount, (hourCount == 1) ? "hour"
                  : "hours"));
          sb.append(String.format("%d %s and ", minutesCount,
                  (minutesCount == 1) ? "minute" : "minutes"));
          sb.append(String.format("%d %s.", secondsCount,
                  (secondsCount == 1) ? "second" : "seconds"));
          System.out.printf("You entered %s seconds, which is %s (%s)%n",
                  new DecimalFormat("#,###").format(secondsIn), sb, sb2);
          

          其中,当我输入 500000 时输出请求(为帖子添加了手动换行符)-

          You entered 500,000 seconds, which is 5 days, 18 hours, 
          53 minutes and 20 seconds. (5 days, 18:53:20 hours)
          

          【讨论】:

            【解决方案7】:

            我对基本 java 算术计算的快速回答是这样的:

            首先考虑以下值:

            1 Minute = 60 Seconds
            1 Hour = 3600 Seconds ( 60 * 60 )
            1 Day = 86400 Second ( 24 * 3600 )
            
            1. 先把输入除以86400,如果能得到大于0的数,这就是天数。 2.再次将第一次计算得到的剩余数字除以 3600,得到小时数
            2. 然后将第二次计算的余数除以 60,即分钟数
            3. 最后,您第三次计算的剩余数字是秒数

            代码sn-p如下:

            int input=500000;
            int numberOfDays;
            int numberOfHours;
            int numberOfMinutes;
            int numberOfSeconds;
            
            numberOfDays = input / 86400;
            numberOfHours = (input % 86400 ) / 3600 ;
            numberOfMinutes = ((input % 86400 ) % 3600 ) / 60 
            numberOfSeconds = ((input % 86400 ) % 3600 ) % 60  ;
            

            希望对你有所帮助 给你。

            【讨论】:

              【解决方案8】:

              看看课堂

              org.joda.time.DateTime
              

              这允许您执行以下操作:

              old = new DateTime();
              new = old.plusSeconds(500000);
              System.out.println("Hours: " + (new.Hours() - old.Hours()));
              

              但是,您的解决方案可能会更简单:

              您需要计算出一天中有多少秒,将输入除以结果得到天数,然后从输入中减去它以保留余数。 然后你需要计算出剩余的小时数, 其次是分钟, 最后的余数是秒。

              这是为您完成的分析,现在您可以专注于代码了。

              你需要问他/她所说的“没有硬编码”是什么意思,一般是指传递参数,而不是固定输入值。有很多方法可以做到这一点,具体取决于您运行代码的方式。属性是java中常用的方式。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-01-06
                • 1970-01-01
                • 2012-09-27
                • 1970-01-01
                • 2017-05-10
                相关资源
                最近更新 更多