如何在 Kotlin 中将当前时间转换为时间戳?

65

我需要的时间戳格式为:2018-03-22 19:02:12.337909

8个回答

64

Kotlin没有自己的时间处理类,所以您只需要使用Java的java.time。对于ISO-8601时间戳(这是首选格式):

DateTimeFormatter.ISO_INSTANT.format(Instant.now())

这将返回2018-04-16T17:00:08.746Z。如果您需要不同的格式或时区,可以指定:

DateTimeFormatter
    .ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS")
    .withZone(ZoneOffset.UTC)
    .format(Instant.now())

有关如何指定格式字符串的详细信息,请参阅java.time.format.DateTimeFormatter JavaDoc

java.time类与Android 26及以上版本和Java 8及以上版本捆绑在一起。 java.time的大多数功能在ThreeTen-Backport项目中被后移至Java 6和Java 7中,而在ThreeTenABP中则进一步适用于早期的Android(<26)。请参见如何使用 ThreeTenABP…

更新2020/07

ThreeTenABP的开发正在逐渐结束。使用Gradle插件4.0及更高版本,您可以直接使用java 8 API,而不需要为应用程序设置最低API级别。

有关详细信息,请参见Java 8+ API desugaring support (Android Gradle Plugin 4.0.0+)


10
需要API级别26或更高版本,有没有兼容旧版API的替代方案? - DarkCygnus
1
哦,没错,@DarkCygnus。对于 Android API 等级低于 26 的情况,请使用 java.time 的 Android 适配版的后移版本。请参阅 如何在 Android 项目中使用 ThreeTenABP - Ole V.V.

56
  val currentTimestamp = System.currentTimeMillis()

3
这不会给你想要的格式。System.currentTimeMillis() 返回的是一个长整型数,而不是一个格式化后的字符串。 - BDL
9
也许这并不是对这个问题的答案,但当我搜索“Kotlin中的时间戳”时,这是最好的答案,所以点赞。 - Azhagthott
1
我不明白为什么这个答案会有那么多赞。很明显,问题中已经说明了所需的时间戳格式。而 System.currentTimeMillis() 并不能返回该格式。 - Akash Verma
有许多种时间戳,但通常使用该术语时(正确或不正确),惯例是指数字时间戳。这可能是为什么这个答案被赞同的原因,因为人们只是在谷歌上搜索“Kotlin中的时间戳”,最终到达了这里。 - max pleaner

36

尝试使用java.sql.Timestamp(System.currentTimeMillis()),我使用API 19时可以正常工作。


1
是 java.security 还是 java.sql? - IgorGanapolsky
2
导入 java.sql.Timestamp - Andres Eusse
12
多年前,随着JSR 310的采纳,可怕的java.sql.Timestamp类被java.time类所替代。InstantOffsetDateTime类取代了它。在2019年建议使用Timestamp是不良的建议。请注意,该类已经被淘汰。 - Basil Bourque

4

首先获取

val currentTimeMillis = System.currentTimeMillis()
// currentTimeMillis = 1674411796305 

然后像这样获取时间戳
val timeStamp = Timestamp(currentTimeMillis)
// timestamp = 2023-01-22 20:23:16.305

3

使用kotlinx.datetime库。以下是操作方法:

val currentTime = Clock.System.now()
println("The current time is $currentTime")

将以此格式打印当前时间:

2023-02-28T07:43:04.618714Z

2
package com.mkyong.date
import java.sql.Timestamp
import java.text.SimpleDateFormat
import java.util.Date
object TimeStampExample {
    private val sdf = SimpleDateFormat("yyyy.MM.dd.HH.mm.ss")
    @JvmStatic fun main(args:Array<String>) {
        //method 1
        val timestamp = Timestamp(System.currentTimeMillis())
        println(timestamp)
        //method 2 - via Date
        val date = Date()
        println(Timestamp(date.getTime()))
        //return number of milliseconds since January 1, 1970, 00:00:00 GMT
        println(timestamp.getTime())
        //format timestamp
        println(sdf.format(timestamp))
    }
}

0

6
请不要教导年轻人使用过时而且以问题闻名的 "SimpleDateFormat" 类。至少不要将其作为首选选项,也不要毫无保留地使用它。现在我们有更好的选择——“java.time”现代Java日期和时间API,以及它的 “DateTimeFormatter”。是的,您可以在Android上使用它。对于旧版本的Android,请参见“如何在Android项目中使用ThreeTenABP”(https://dev59.com/hFkT5IYBdhLWcg3wNs3-)。 - Ole V.V.
1
当然,我的错在于没有提到使用Android项目。我在开发者Android文档中找到了这行代码,它很简单并且对我有效,所以我认为没问题。抱歉。 - lev4
3
请注意,Kotlin远不止用于Android开发。 - treesAreEverywhere

0
你有多种选择
// method 1
val currentTimestamp =System.currentTimeMillis()

// method 2
val currentTimestamp =Instant.now().toEpochMilli()

// method 3
val currentZonedDateTime = ZonedDateTime.now()
val currentTimestamp = currentZonedDateTime.toInstant().toEpochMilli()

// method 4
val currentTimestamp = Clock.System.now()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接