You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android环境下如何解析2018-05-19T04:51:29.6702751+00:00为Date object

在Android中将带时区的ISO日期字符串转为Date对象

这个问题我之前做项目时刚好遇到过,其实处理这种格式的日期字符串并不复杂,根据你的Android版本可以选择不同的方案:

方案一:Android 8.0(API 26)及以上推荐使用java.time API

从Android 8.0开始,系统支持Java 8引入的java.time包,这是官方推荐的日期处理方式,相比旧的SimpleDateFormat更安全(无线程安全问题),也更易用:

String serverDateStr = "2018-05-19T04:51:29.6702751+00:00";
// 直接用内置的ISO偏移日期时间格式化器,完美匹配你的字符串格式
DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
OffsetDateTime offsetDateTime = OffsetDateTime.parse(serverDateStr, formatter);

// 如果需要转换为Date对象(如果业务需要的话,更推荐直接使用OffsetDateTime等新类型)
Date date = Date.from(offsetDateTime.toInstant());

ISO_OFFSET_DATE_TIME格式化器原生就支持解析带时区偏移(比如+00:00)的ISO日期字符串,不需要额外自定义格式,非常省心。

方案二:兼容Android 7.0及以下版本(使用SimpleDateFormat)

如果需要适配更低版本的Android,可以用传统的SimpleDateFormat,只需要正确定义格式字符串即可:

String serverDateStr = "2018-05-19T04:51:29.6702751+00:00";
// 格式字符串对应解析规则:SSSSSSS匹配毫秒后的纳秒部分,XXX匹配时区偏移(如+00:00)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSXXX", Locale.US);
try {
    Date date = sdf.parse(serverDateStr);
    // 这里处理转换后的Date对象
} catch (ParseException e) {
    // 处理解析异常
    e.printStackTrace();
}

注意两点:

  • 必须指定Locale.US,避免因系统区域设置差异导致解析失败
  • XXX是用来匹配+00:00这种格式的时区偏移,不能用Z(Z对应+0000不带冒号的格式)

额外推荐:低版本Android的更佳选择(ThreeTenABP)

如果你不想用SimpleDateFormat(毕竟它有线程安全隐患),可以引入ThreeTenABP库,它是java.time API在低版本Android上的兼容实现,用法和方案一几乎一致,只需要更换包路径即可。

内容的提问来源于stack exchange,提问作者Kishita Variya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:17:21