Update duration display

This commit is contained in:
Karlatemp 2020-05-09 11:06:00 +08:00
parent 781af6d837
commit 0716438242
No known key found for this signature in database
GPG Key ID: 21FBDDF664FF06F8
3 changed files with 55 additions and 2 deletions

View File

@ -24,6 +24,7 @@ import net.mamoe.mirai.network.closeAndJoin
import net.mamoe.mirai.utils.*
import net.mamoe.mirai.utils.internal.retryCatching
import kotlin.coroutines.CoroutineContext
import kotlin.time.Duration
import kotlin.time.ExperimentalTime
import kotlin.time.measureTime
@ -138,7 +139,7 @@ abstract class BotImpl<N : BotNetworkHandler> constructor(
reconnect()
}
logger.info { "Reconnected successfully in ${time.inMilliseconds} ms" }
logger.info { "Reconnected successfully in ${time.asHumanReadable}" }
}
is BotOfflineEvent.Active -> {
val msg = if (event.cause == null) {

View File

@ -15,6 +15,10 @@ package net.mamoe.mirai.utils
import kotlin.jvm.JvmMultifileClass
import kotlin.jvm.JvmName
import kotlin.jvm.JvmSynthetic
import kotlin.math.floor
import kotlin.time.Duration
import kotlin.time.DurationUnit
import kotlin.time.ExperimentalTime
/**
* 时间戳
@ -76,4 +80,21 @@ inline val Int.weeksToSeconds: Long
@get:JvmSynthetic
inline val Int.monthsToSeconds: Long
get() = this * 30.daysToSeconds
get() = this * 30.daysToSeconds
@ExperimentalTime
val Duration.asHumanReadable: String
get() {
val builder = StringBuilder()
val days = toInt(DurationUnit.DAYS)
val hours = toInt(DurationUnit.HOURS) % 24
val minutes = toInt(DurationUnit.MINUTES) % 60
val s = floor(toDouble(DurationUnit.SECONDS) % 60 * 1000) / 1000
with(builder) {
if (days != 0) append("${days}d ")
if (hours != 0) append("${hours}h ")
if (minutes != 0) append("${minutes}min ")
append("${s}s")
}
return builder.toString()
}

View File

@ -0,0 +1,31 @@
/*
* Copyright 2020 Mamoe Technologies and contributors.
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
package net.mamoe.mirai.utils
import kotlin.test.Test
import kotlin.test.assertTrue
import kotlin.time.DurationUnit
import kotlin.time.ExperimentalTime
import kotlin.time.toDuration
internal class TimeTest {
@ExperimentalTime
@Test
fun testTimeHumanReadable() {
val time0 = 1.toDuration(DurationUnit.DAYS) +
20.toDuration(DurationUnit.HOURS) +
15.toDuration(DurationUnit.MINUTES) +
2057.toDuration(DurationUnit.MILLISECONDS)
println(time0.asHumanReadable)
assertTrue { time0.asHumanReadable == "1d 20h 15min 2.057s" }
val time1 = 1.toDuration(DurationUnit.DAYS) + 59.toDuration(DurationUnit.MINUTES)
println(time1.asHumanReadable)
assertTrue { time1.asHumanReadable == "1d 59min 0.0s" }
}
}