【问题标题】:How do I get the current time as a TimeStamp in Kotlin?如何在 Kotlin 中获取当前时间作为时间戳?
【发布时间】:2018-09-26 11:47:09
【问题描述】:

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

【问题讨论】:

    标签: time kotlin timestamp


    【解决方案1】:

    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 (How to use ThreeTenABP…

    2020/07 更新

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

    欲了解更多信息,请参阅Java 8+ API desugaring support (Android Gradle Plugin 4.0.0+)

    【讨论】:

    • 这需要 API lvl 26 或以上,是否有与旧 API 兼容的替代方案?
    • 哦,是的,@DarkCygnus。对于 26 以下的 Android API 级别,请使用 java.time 的 backport 的 Android 适配。见How to use ThreeTenABP in Android Project
    【解决方案2】:

    试试 java.sql.Timestamp(System.currentTimeMillis()) 我正在使用 API 19,它适用于我

    【讨论】:

    • 是java.security还是java.sql?
    • 导入 java.sql.Timestamp
    • 可怕的 java.sql.Timestamp 类在几年前被 JSR 310 采用的 java.time 类所取代。被 InstantOffsetDateTime 类取代。建议在 2019 年使用 Timestamp 是糟糕的建议。
    【解决方案3】:
      val currentTimestamp = System.currentTimeMillis()
    

    【讨论】:

    • 这不会给你请求的格式。 System.currentTimeMillis() 返回一个长字符串,而不是格式化字符串。
    • 也许这不是这个问题的答案,但是当我搜索“Kotlin 中的时间戳”时,这是最好的答案,所以点赞
    【解决方案4】:
    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))
        }
    }
    

    【讨论】:

      【解决方案5】:

      我正在使用这个

      val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())

      这里有所有的日期和时间模式 https://developer.android.com/reference/java/text/SimpleDateFormat

      【讨论】:

      • 请不要教年轻人使用早已过时且臭名昭著的麻烦SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。今天我们在java.time, the modern Java date and time API, 和它的DateTimeFormatter 中有很多更好的地方。是的,您可以在 Android 上使用它。对于较旧的 Android,请参阅 How to use ThreeTenABP in Android Project
      • 当然,我没有提到 Android 项目的使用。我在开发人员 android 文档中找到了这行代码,它很简单并且对我有用,所以我认为它很好。对不起。
      • 请注意,Kotlin 不仅仅是 Android 上的 Kotlin。
      猜你喜欢
      • 2011-02-16
      • 2020-11-20
      • 2021-12-04
      • 2017-02-15
      • 1970-01-01
      • 2012-03-04
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多