Android
Kotlin

【Android】任意の時刻が現在時刻から何秒前、何分前、何時間前、何日前かを計算する関数

SNSとかでよくある何秒前、何分前、何時間前、何日前の投稿かが分かるUIを実現したかったため作りました。

やりたいこと

↓コレ(赤枠のところ)
Screen Shot 2018-01-03 at 5.17.56 PM.png

環境

Kotlin: 1.2.10

サンプルコード

fun foo(time: Long): String {
    val diff = System.currentTimeMillis() - time

    val sec = diff / 1000L

    val min = sec / 60L
    if (min == 0L) {
        return "${sec}s"
    }

    val hour = min / 60L
    if (hour == 0L) {
        return "${min}m"
    }

    val day = hour / 24L
    if (day == 0L) {
        return "${hour}h"
    }

    return "${day}d"
}

補足

System.currentTimeMillis()は引数で受け取るようにしてテストを書いたほうがいいですが、サンプルなのでわかりやすさ?を重視しました。
もっとうまく実装できるような気がしますがとりあえずこれでやりたいことは実現できました。
Twitterは1日以上前の場合はN日前という表示ではなく日付を表示しているようです。(例: 1 Jan, 31 Dec 2017