/*
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
*/