如何在 Kotlin 标准库(多平台)上获取当前的 unixtime

Posted

技术标签:

【中文标题】如何在 Kotlin 标准库(多平台)上获取当前的 unixtime【英文标题】:How to get current unixtime on Kotlin standard library (multiplatform) 【发布时间】:2021-01-22 19:54:48 【问题描述】:

我有一个 Kotlin 多平台项目,我想在共享代码中获取当前的 unixtime。

您如何在 Kotlin 标准库中做到这一点?

【问题讨论】:

【参考方案1】:

可以使用实验性 Kotlin 日期时间库, 当前版本为 0.1.0

val nowUnixtime = Clock.System.now().epochSeconds

更多信息在这里: https://github.com/Kotlin/kotlinx-datetime

【讨论】:

【参考方案2】:

如果您已经使用 kotlinx-datetime,或者计划将更多用于其他日期/时间功能,那么使用 kotlinx-datetime 是一个不错的选择。但是,如果您的应用程序/库唯一需要的是 epochSeconds,我认为添加对 kotlinx-datetime 的依赖关系有点过头了。

声明自己的epochMillis() 函数并为每个平台实现它很简单:

// for common
expect fun epochMillis(): Long

// for jvm
actual fun epochMillis(): Long = System.currentTimeMillis()

// for js
actual fun epochMillis(): Long = Date.now().toLong()

// for native it depends on target platform
// but posix can be used on any posix-compatible native targets
actual fun epochMillis(): Long = memScoped 
    val timeVal = alloc<timeval>()
    gettimeofday(timeVal.ptr, null)
    (timeVal.tv_sec * 1000) + (timeVal.tv_usec / 1000)



【讨论】:

以上是关于如何在 Kotlin 标准库(多平台)上获取当前的 unixtime的主要内容,如果未能解决你的问题,请参考以下文章

将 .klib 库添加到 kotlin 多平台

使用多平台模拟 kotlin 中的常见测试

我如何在 swift Kotlin 多平台上使用 Flow?

Kotlin 通用库可在多个 MPP 中重用

无法在 commonMain 中为 kotlin 多平台使用依赖项

将 kotlin 多平台库发布到 Maven Central(InvalidMavenPublicationException 多个工件具有相同的......)