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

如何在Android KitKat及更低版本将ISO 8601字符串转为时间戳?

兼容Android KitKat的ISO 8601字符串转Java Date方案

我有符合ISO 8601标准的字符串:

2024-03-25T11:34:15.000Z

需要将其转换为Java Date类型。目前找到的基于Java 8时间API的方案(如下)仅支持Android Oreo及以上版本,需要兼容到KitKat(API 19)的转换方法,以下是可行思路:

之前尝试过的ZonedDateTime、Java 8原生时间API方案均存在版本要求问题,JAXB的转换方案虽可行但会使APK增大约9MB,不推荐使用。

方案一:自定义SimpleDateFormat解析

利用Android低版本已支持的SimpleDateFormat,适配ISO 8601格式并指定UTC时区,避免时间偏差:

// 定义匹配ISO 8601的格式模板,固定处理UTC时区的'Z'标记
SimpleDateFormat isoDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
// 必须设置时区为UTC,否则会使用设备本地时区解析,导致时间错误
isoDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

try {
    Date targetDate = isoDateFormat.parse("2024-03-25T11:34:15.000Z");
    long epochTimestamp = targetDate.getTime();
} catch (ParseException e) {
    // 处理解析异常
    e.printStackTrace();
}

注意事项:

  • 必须指定Locale.US,避免部分地区的本地化格式干扰解析
  • 强制设置时区为UTC,确保Z标记对应的UTC时间被正确解析

方案二:使用ThreeTenABP兼容库(推荐)

这是Google推荐的Android低版本Java时间API兼容方案,基于JSR-310标准,写法和Java 8原生API几乎一致,且不会大幅增加APK体积:

  1. 添加依赖到项目的build.gradle(Module级别):
implementation 'com.jakewharton.threetenabp:threetenabp:1.4.5'
  1. 在自定义Application类中初始化库:
@Override
public void onCreate() {
    super.onCreate();
    AndroidThreeTen.init(this);
}
  1. 执行转换:
Instant instant = Instant.parse("2024-03-25T11:34:15.000Z");
Date targetDate = Date.from(instant);
long epochTimestamp = targetDate.getTime();

该方案兼容API 9及以上,完全满足KitKat需求,同时保留了Java 8时间API的简洁性和可靠性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:12:35