问题描述
我有一个简单的函数可以从时间戳(字符串)中提取时间。
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