1 package leakcanary.internal.activity.ui 2 3 import android.content.Context 4 import android.text.format.DateUtils 5 6 internal object TimeFormatter { 7 8 private const val MINUTE_MILLIS = 60 * 1000 9 private const val TWO_MINUTES_MILLIS = 2 * MINUTE_MILLIS 10 private const val FIFTY_MINUTES_MILLIS = 50 * MINUTE_MILLIS 11 private const val NINETY_MINUTES_MILLIS = 90 * MINUTE_MILLIS 12 private const val HOUR_MILLIS = 60 * MINUTE_MILLIS 13 private const val DAY_MILLIS = 24 * HOUR_MILLIS 14 private const val TWO_DAYS_MILLIS = 48 * HOUR_MILLIS 15 formatTimestampnull16 fun formatTimestamp( 17 context: Context, 18 timestampMillis: Long 19 ): String { 20 // Based on https://stackoverflow.com/a/13018647 21 val nowMillis = System.currentTimeMillis() 22 return when (val diff = nowMillis - timestampMillis) { 23 in 0..MINUTE_MILLIS -> { 24 "just now" 25 } 26 in MINUTE_MILLIS..TWO_MINUTES_MILLIS -> { 27 "a minute ago" 28 } 29 in TWO_MINUTES_MILLIS..FIFTY_MINUTES_MILLIS -> { 30 "${diff / MINUTE_MILLIS} minutes ago" 31 } 32 in FIFTY_MINUTES_MILLIS..NINETY_MINUTES_MILLIS -> { 33 "an hour ago" 34 } 35 in NINETY_MINUTES_MILLIS..DAY_MILLIS -> { 36 "${diff / HOUR_MILLIS} hours ago" 37 } 38 in DAY_MILLIS..TWO_DAYS_MILLIS -> { 39 "yesterday" 40 } 41 else -> { 42 DateUtils.formatDateTime( 43 context, timestampMillis, 44 DateUtils.FORMAT_SHOW_TIME or DateUtils.FORMAT_SHOW_DATE 45 ) 46 } 47 } 48 } 49 }