如何解决从时间戳获取特定格式的时间,包括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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。