Kotlin - 时间 Duration

一、概念

用于表示时间度量,简化了时间单位的换算、计算时间差、操作间隔、比较等场景。

二、使用

2.1 创建

2.1.1 Number -> Duration

扩展函数适用于 Int、Long、Double。Duration 可以是正、负、零、正无穷大或负无穷大。

nanosecondspublic inline val Int.nanoseconds get() = toDuration(DurationUnit.NANOSECONDS)
microsecondspublic inline val Int.microseconds get() = toDuration(DurationUnit.MICROSECONDS)
millisecondspublic inline val Int.milliseconds get() = toDuration(DurationUnit.MILLISECONDS)
secondspublic inline val Int.seconds get() = toDuration(DurationUnit.SECONDS)
minutespublic inline val Int.minutes get() = toDuration(DurationUnit.MINUTES)
hourspublic inline val Int.hours get() = toDuration(DurationUnit.HOURS)
dayspublic inline val Int.days get() = toDuration(DurationUnit.DAYS)
val tenSeconds: Duration = 10.seconds   //打印:10s
val sixMinutes: Duration = 6.minutes   //打印:6m
val negativeOneNanoseconds: Duration = (-1).seconds   //打印:-1ns
val negativeInfiniteDays: Duration = Double.NEGATIVE_INFINITY.days   //打印:-Infinity

2.1.2 String -> Duration 

2.2 转换

2.2.1 Duration -> Number

一个要传单位,一个直接使用。

toXXX(DurationUnit)

public fun toInt(unit: DurationUnit): Int        //使用注意精度不够

public fun toLong(unit: DurationUnit): Long

public fun toDouble(unit: DurationUnit): Double

.inWholeXXX

public val inWholeNanoseconds: Long

public val inWholeMicroseconds: Long

public val inWholeMilliseconds: Long

public val inWholeSeconds: Long

public val inWholeMinutes: Long

public val inWholeHours: Long

public val inWholeDays: Long

val before = 30.minutes
val after1 = before.toLong(DurationUnit.SECONDS) //打印:1800
val after2 = before.inWholeSeconds  //打印:1800

2.2.2 Duration -> String

2.3 四则运算

无论是什么单位都可以相互运算。

val twelveHours = 12.hours
val oneDay = 1.days
val thirtyMilliseconds = 30.milliseconds
val fiveMilliseconds = 5.milliseconds
println(oneDay + twelveHours)   //打印:1d 12h
println(oneDay + thirtyMilliseconds)   //打印:1d 0h 0m 0.03s
println(thirtyMilliseconds / fiveMilliseconds) //  打印:6.0

2.4 逻辑运算

val oneHour = 1.hours
val sixtyMinutes = 60.minutes
val twoHouts = 2.hours
println(oneHour == sixtyMinutes)   //打印:true
println(oneHour > twoHouts)   //打印:false

2.5 解构

分别获取不同单位上的数值,不是整个转换成该单位的数值。

val time = 548341869.seconds
println(time + 0.seconds)   //6346d 13h 11m 9s
time.toComponents { seconds, nanoseconds ->  }
time.toComponents { minutes, seconds, nanoseconds ->  }
time.toComponents { hours, minutes, seconds, nanoseconds ->  }
time.toComponents { days, hours, minutes, seconds, nanoseconds ->
    println(days)   //6346
    println(hours)  //13
    println(minutes)    //11
    println(seconds)    //9
    println(nanoseconds)    //0
}

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值