java - 如何使用偏移量解析日期时间
问题描述
像“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:日期时间解析很麻烦。与其对这个问题投反对票,不如用一行简单的代码更有帮助
解决方案
可以使用Z
(RFC 822) 或X
(ISO 8601) 解析时区,请参阅https://developer.android.com/reference/java/text/SimpleDateFormat
推荐阅读
- vba - 如何在 vba 中单击网页上的链接
- java - 如何在内部类中使用枚举?
- python - 如何使用字典选项编写 Python 方法?
- javascript - ES5 中类似 ES6 的模板 - 当属性名称中有 .' 时不起作用
- c# - 我可以使用接口来定义基本期望吗?
- python - Python 重定向(有延迟)
- java - 来自同一客户端的 HttpURLConnection 客户端和 API 不同的 Header
- css - HTML/CSS:如何避免从父类继承样式(使用带有引导程序的 react-select)
- php - 为什么 php for 循环可以在没有计数器的情况下运行?
- ios - 当 Apple Music 应用程序从设备中移除时,`canOpenURL` 返回 true