How to convert seconds into weeks, days, hours, minutes, and seconds in Scala

1 Answer

0 votes
/*
Use integer division and modulo:

1 minute = 60 seconds
1 hour   = 60 minutes
1 day    = 24 hours
1 week   = 7 days
*/

/*
    Convert a total number of seconds into weeks, days, hours,
    minutes, and seconds. The function receives the total seconds
    and returns each component in a case class.
*/
case class TimeParts(
  weeks: Long,
  days: Long,
  hours: Long,
  minutes: Long,
  seconds: Long
)

object ConvertSeconds {

  def convertSeconds(totalSecondsInput: Long): TimeParts = {
    val SECS_PER_MIN: Long  = 60
    val SECS_PER_HOUR: Long = 60 * SECS_PER_MIN
    val SECS_PER_DAY: Long  = 24 * SECS_PER_HOUR
    val SECS_PER_WEEK: Long = 7  * SECS_PER_DAY

    // Use a var only internally for stepwise reduction
    var totalSeconds = totalSecondsInput

    // Compute each unit using integer division and modulo
    val weeks: Long = totalSeconds / SECS_PER_WEEK
    totalSeconds %= SECS_PER_WEEK

    val days: Long = totalSeconds / SECS_PER_DAY
    totalSeconds %= SECS_PER_DAY

    val hours: Long = totalSeconds / SECS_PER_HOUR
    totalSeconds %= SECS_PER_HOUR

    val minutes: Long = totalSeconds / SECS_PER_MIN
    val seconds: Long = totalSeconds % SECS_PER_MIN

    TimeParts(weeks, days, hours, minutes, seconds)
  }

  def main(args: Array[String]): Unit = {
    val seconds: Long = 1_000_000

    val result: TimeParts = convertSeconds(seconds)

    println(
      s"${result.weeks} weeks, " +
      s"${result.days} days, " +
      s"${result.hours} hours, " +
      s"${result.minutes} minutes, " +
      s"${result.seconds} seconds"
    )
  }
}


/*
run:

1 weeks, 4 days, 13 hours, 46 minutes, 40 seconds

*/

 



answered 14 hours ago by avibootz

Related questions

...