【问题标题】:Convert minutes to hours scala将分钟转换为小时
【发布时间】:2018-12-26 07:59:46
【问题描述】:

我在minutes中有一个号码,例如:

Int totalminutes= 342

我想这样显示它:

5h:42m:..s

我做了一个 scala 函数将分钟转换为小时并返回 HH:MM:SS

scala> def convertSeconds(input:Int):String ={
     | val totalMinutes = input/60
     | val seconds = input%60
     | val minutes = totalMinutes%60
     | val hours   = totalMinutes%60
     |
     | return "%sh:%sm:%ss".format(hours,minutes,seconds)
     | }
convertSeconds: (input: Int)String

我做了我的测试:

scala> convertSeconds(120) // 120 minutes
res22: String = 2h:2m:0s  // why it add 2 minutes

scala> convertSeconds(60) // 60 minutes
res23: String = 1h:1m:0s  // adding 1 minute

scala> convertSeconds(36)  // 36 minutes
res24: String = 0h:0m:36s   // I want to return 0h:30m:06s

解决办法是:

scala> def convertSeconds(input:Int):String ={
//val totalMinutes = input/60
//val seconds = input/60%60
val minutes = input%60
val hours   = input/60
return "%sh:%sm".format(hours,minutes)
}
convertSeconds: (input: Int)String

scala> convertSeconds(36)
res57: String = 0h:36m

scala> convertSeconds(120)
res58: String = 2h:0m

scala> convertSeconds(122)
res59: String = 2h:2m

scala> convertSeconds(2166)
res60: String = 36h:6m

【问题讨论】:

  • 您使用相同的公式计算分钟和小时,因此您将得到相同的数字。
  • 我编辑了我的问题,谢谢
  • 如果一个方法将36转换为0h:36m,它可能应该被称为convertMinutes...
  • @vero - 您在问题中回答了您的问题。对 SO 的期望方法是自我回答问题。
  • 我建议你在这里找到一些灵感:Why can't I get a duration in minutes or hours in java.time?(答案是你可以)

标签: scala localdate


【解决方案1】:

我不确定您是否需要一个单独的函数来实现这一点。 Scala 已经提供了library 来做到这一点

scala> val secs = 62
secs: Int = 62

scala> import scala.concurrent.duration._

scala> val inTime = Duration(secs,SECONDS)
inTime: scala.concurrent.duration.FiniteDuration = 62 seconds

scala> "%02d:%02d:%02d".format(inTime.toHours,inTime.toMinutes%60,inTime.toSeconds%60)
res8: String = 00:01:02

EDIT-1:如果您传递一个数字 >= 86400(一天中的总秒数),这不能处理

【讨论】:

  • 62 === 00:01:62?我不这么认为。
  • 感谢您指出这一点。我已经更新了答案。此外,这种方法不处理数字 > 86400(一天中的总秒数)
【解决方案2】:

在 Java 中,相信您自己翻译:

    int totalminutes = 342;
    Duration dur = Duration.ofMinutes(totalminutes);
    String display = String.format("%dh:%02dm:%02ds",
            dur.toHours(), dur.toMinutesPart(), dur.toSecondsPart());
    System.out.println(display);

打印出来:

5h:42m:00s

如果有几秒钟,请改用Duration.ofSeconds

不要自己计算。这很容易出错,并且需要您的读者花一些时间来说服自己/他自己您的计算是正确的。而是让库方法进行计算,即使它们看起来微不足道。

你的代码出了什么问题?

已经说过了:你用过

 val hours   = totalMinutes%60

这应该是一个部门:

 val hours   = totalMinutes / 60

犯这样的错误比你想象的要容易。作为比较,当您打算使用toHours 时,您不会那么容易调用toMinutesPart,如果您仍然这样做,则更容易发现错误。

【讨论】:

  • 我永远喜欢这样做。
【解决方案3】:

你的函数应该是这样的,你通过的是秒而不是分钟:

def convertSeconds(input:Int):String ={
       val hours   = input/3600
       val minutes = (input-hours*3600)/60
       val seconds = input%3600-minutes*60
       "%sh:%sm:%ss".format(hours,minutes,seconds)
     }

如果你要传递minutes,函数应该是这样的,我命名为convertMinutes,你的秒为zero,你可以通过这段代码进入你指定的显示:

def convertMinutes(input:Int):String ={
        val hours   = input/60
        val minutes = input-hours*60
        "%sh:%sm:%ss".format(hours,minutes,"..")
    }

在 Scala REPL 中:

scala> convertSeconds(7523)
res4: String = 2h:5m:23s


scala> convertSeconds(9523)
res5: String = 2h:38m:43s

scala> convertSeconds(3724)
res6: String = 1h:2m:4s


scala> convertMinutes(342)
res10: String = 5h:42m:..s

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-18
    • 2014-12-01
    • 2015-07-20
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    相关资源
    最近更新 更多