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

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 data class.
*/
data class TimeParts(
    val weeks: Long,
    val days: Long,
    val hours: Long,
    val minutes: Long,
    val seconds: Long
)

fun 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

    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

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

fun main() {
    val seconds: Long = 1_000_000

    val result = convertSeconds(seconds)

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



/*
run:

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

*/

 



answered May 20 by avibootz

Related questions

...