Commit 07164382 authored by Karlatemp's avatar Karlatemp

Update duration display

parent 781af6d8
...@@ -24,6 +24,7 @@ import net.mamoe.mirai.network.closeAndJoin ...@@ -24,6 +24,7 @@ import net.mamoe.mirai.network.closeAndJoin
import net.mamoe.mirai.utils.* import net.mamoe.mirai.utils.*
import net.mamoe.mirai.utils.internal.retryCatching import net.mamoe.mirai.utils.internal.retryCatching
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
import kotlin.time.Duration
import kotlin.time.ExperimentalTime import kotlin.time.ExperimentalTime
import kotlin.time.measureTime import kotlin.time.measureTime
...@@ -138,7 +139,7 @@ abstract class BotImpl<N : BotNetworkHandler> constructor( ...@@ -138,7 +139,7 @@ abstract class BotImpl<N : BotNetworkHandler> constructor(
reconnect() reconnect()
} }
logger.info { "Reconnected successfully in ${time.inMilliseconds} ms" } logger.info { "Reconnected successfully in ${time.asHumanReadable}" }
} }
is BotOfflineEvent.Active -> { is BotOfflineEvent.Active -> {
val msg = if (event.cause == null) { val msg = if (event.cause == null) {
......
...@@ -15,6 +15,10 @@ package net.mamoe.mirai.utils ...@@ -15,6 +15,10 @@ package net.mamoe.mirai.utils
import kotlin.jvm.JvmMultifileClass import kotlin.jvm.JvmMultifileClass
import kotlin.jvm.JvmName import kotlin.jvm.JvmName
import kotlin.jvm.JvmSynthetic 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 ...@@ -76,4 +80,21 @@ inline val Int.weeksToSeconds: Long
@get:JvmSynthetic @get:JvmSynthetic
inline val Int.monthsToSeconds: Long inline val Int.monthsToSeconds: Long
get() = this * 30.daysToSeconds get() = this * 30.daysToSeconds
\ No newline at end of file
@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()
}
/*
* 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" }
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment