从时间戳获取特定格式的时间,包括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上设置时区的更多信息,请参见以下答案:https://stackoverflow.com/a/18124407/4383500

这会将您的时间从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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...