Search code examples
scalalocaldate

Convert minutes to hours scala


I have a number in minutes, for example:

Int totalminutes= 342

I want to dispaly it like this:

5h:42m:..s

I did a scala function to convert the minute to hour and return 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

I did my tests:

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

The solution is:

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

Solution

  • I am not sure if you need a separate function to achieve this. Scala already gives a library to do that

    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: What this does not handle is if you pass a number >= 86400 (total seconds in a day)