从时间戳中获取特定格式的时间,包括 TimeZone

Get time in specific format from timestamp including TimeZone

我有一个简单的函数可以从字符串形式的时间戳中提取时间。

timestamp(input)  : "2020-08-13T09:33:17Z"
outputTime(output): "09:33"
desired output    : "12:33"

功能:

fun getTimeFromTimestamp(timestamp: String): String {
    val inputFormat: DateFormat = SimpleDateFormat("yyyy-MM-dd\'T\'HH:mm:ss\'Z\'", Locale.getDefault())
    val time = inputFormat.parse(timestamp) ?: Date()
    val outputFormat: DateFormat = SimpleDateFormat("HH:mm", Locale.getDefault())
    val outputTime = outputFormat.format(time)

    return outputTime
}

问题是它不会影响输出中的时区,在这种情况下是 GMT+3

你可以看到我的调试screenshot

如何确保显示的时间包括其附带的时区 (GMT+3)?

输出时间采用该格式,因为您在此行中将其指定为 (HH:mm)

val outputFormat: DateFormat = SimpleDateFormat("HH:mm", Locale.getDefault())

如果您希望它包含时区,请将时区附加到输出字符串

编辑

"HH:mm zZ" 似乎对我有用,看看这个 fiddle

问题是您导入开始时间 "2020-08-13T09:33:17Z" AS GMT+3 然后尝试将其格式化为 GMT+3。尝试将您的导入日期格式化为 GMT+0,然后将输出格式保持为 GMT+3

您可以查看此答案以了解有关如何在 SimpleDateFormat 上设置时区的更多信息:

这会将您的时间从 GMT 时间戳转换为当地时间

  fun getTimeFromTimestamp(timestamp: String): String {
        val inputFormat: DateFormat = SimpleDateFormat("yyyy-MM-dd\'T\'HH:mm:ss\'Z\'")
        inputFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
        val time = inputFormat.parse(timestamp) ?: Date()
        val outputFormat: DateFormat = SimpleDateFormat("HH:mm ,z")
        inputFormat.setTimeZone(TimeZone.getDefault());
        val outputTime = outputFormat.format(time)
    return outputTime

使用 LocalDateTime [java.time] 代替,因为 2020 年不推荐使用 SimpleDateFormat

勾选这个link