【问题标题】:How to get current date and time in ISO 8601 format in kotlin?如何在 kotlin 中以 ISO 8601 格式获取当前日期和时间?
【发布时间】:2019-07-22 02:05:37
【问题描述】:

我正在尝试以 ISO 8601 格式获取当前日期和时间。我下面的代码返回 14 天后的日期和不正确的时间。我需要 api 请求的正确格式和当前日期。

val formatter = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").apply {
        this.timeZone = TimeZone.getTimeZone("CST")
    }

val now = Calendar.getInstance(TimeZone.getTimeZone("CST"))

val sendDateUAT = formatter.format(now.time)
Log.d(TAG, "sendDate: $sendDateUAT")

这会返回:2019-08-05T02:53:40Z

编辑:这是现在。时间:

java.util.GregorianCalendar[time=1564973620006,areFieldsSet=true,lenient=true,zone=GMT,firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=7,WEEK_OF_YEAR=32,WEEK_OF_MONTH=2,DAY_OF_MONTH=5,DAY_OF_YEAR=217,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=2,HOUR_OF_DAY=2,MINUTE=53,SECOND=40,MILLISECOND=6,ZONE_OFFSET=0,DST_OFFSET=0]

【问题讨论】:

  • 无法在本地重现。你在哪里执行这段代码?我怀疑时钟不正确。
  • 你能验证now.time的结果是预期的吗?即只需使用标准 UTC 格式对其进行格式化,以查看结果并与您的机器当前时间进行比较。您的格式对于提取 6801 看起来是正确的;至少从我在网上看到的几个例子来看。
  • @HoratiusCocles 我刚刚用now.time 结果更新了我的问题。
  • @Phil 我正在 android studio 中执行此代码。它应该获取设置为 CST 的计算机系统时间。
  • 1564973620006 是格林威治标准时间:2019 年 8 月 5 日星期一 02:53:40.006。在我看来,当您提出问题时,一天中的时间是正确的,但日期是提前 2 周。另外MONTH=7 表示八月(啊!),而您有DAY_OF_MONTH=5

标签: android kotlin iso8601 current-time


【解决方案1】:

这是一个帮助类,您可以使用它来转换您的日期:

public object DateHelper {
    private const val ISO_8601_24H_FULL_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

    @JvmName("toIsoStringNullable")
    fun Date?.toIsoString(): String? {
        return this?.toIsoString()
    }

    fun Date.toIsoString(): String {
        val dateFormat: DateFormat = SimpleDateFormat(ISO_8601_24H_FULL_FORMAT)
        return dateFormat.format(this)
    }
}

可以这么简洁地使用:

Date().toIsoString()

【讨论】:

    【解决方案2】:

    由于某种原因,这解决了问题并返回了正确的日期。

    val today = Calendar.getInstance()
    val sendDateUAT = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(today.time)
    

    【讨论】:

    • 感谢您回答您自己的问题。不过,答案并不正确。 Z 是一个偏移量(距离 UTC 为 0),因此将其附加到可能(通常具有)不同偏移量的日期和时间会产生不正确的结果。
    猜你喜欢
    • 2012-11-12
    • 2011-12-30
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    相关资源
    最近更新 更多