首页 > 解决方案 > 如何使用偏移量解析日期时间

问题描述

像“2018-04-01 10:00:00”这样的日期时间字符串可用于使用以下 Kotlin 代码创建 Date 对象:

val format = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
val d : Date = format.parse("2018-04-01 10:00:00")   // works fine

但是如何解析具有如下偏移量的日期时间字符串:

2018-04-01 10:00:00+02       // GMT + 2 hours
2018-04-01 10:00:00+02:30    // GMT + 2 hours, 30 minutes
2018-04-01 10:00:00+0230     // GMT + 2 hours, 30 minutes

Java 8:Instant 不是一个选项。

编辑:

我已经尝试过这个建议,并使用了 'x'、'X'、'z' 和 'Z'、'XXX' 有和没有前导空格。编译良好。实例化 SimpleDateFormat 时 x 版本崩溃 - 在使用的​​ android api 级别中似乎不受支持:

// java.lang.IllegalArgumentException: Unknown pattern character 'X'
var formatter3 = SimpleDateFormat("yyyy-MM-dd HH:mm:ssX")

// java.lang.IllegalArgumentException: Unknown pattern character 'x'
var formatter4 = SimpleDateFormat("yyyy-MM-dd HH:mm:ssx")

// java.lang.IllegalArgumentException: Unknown pattern character 'x'
var formatter5 = SimpleDateFormat("yyyy-MM-dd HH:mm:ss x")

z 版本:

val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ")
or
val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ssz")
val date = formatter.parse("2018-04-24 17:33:02+02")

似乎工作。

@Andreas:日期时间解析很麻烦。与其对这个问题投反对票,不如用一行简单的代码更有帮助

标签: javaandroiddatetimekotlin

解决方案


可以使用Z(RFC 822) 或X(ISO 8601) 解析时区,请参阅https://developer.android.com/reference/java/text/SimpleDateFormat


推荐阅读