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

Java中如何将字符串格式的日期时间转换为Long类型?

如何将ISO格式日期字符串转换为Java Long类型时间戳

你之前用Long.valueOf(startTime)和Long.parseLong(startTime)报错是因为这两个方法仅能解析纯数字字符串,而你的"2022-10-19T14:31:22+00:00"是标准ISO 8601格式的日期文本,不属于数字范畴,自然会抛出NumberFormatException。

下面提供两种可行的转换方案:

方案1:Java 8及以上推荐方式(线程安全)

Java 8引入的java.time包是线程安全且更易用的日期API,直接用它解析ISO偏移日期时间:

  • 利用DateTimeFormatter.ISO_OFFSET_DATE_TIME匹配你的日期格式(无需手动编写格式串)
  • 将字符串解析为OffsetDateTime对象
  • 转换为Instant后调用toEpochMilli()获取毫秒级时间戳(Long类型)

代码示例:

String startTime = "2022-10-19T14:31:22+00:00";

// 解析ISO格式日期字符串
OffsetDateTime offsetDateTime = OffsetDateTime.parse(startTime, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
// 转换为毫秒级时间戳(Long类型)
Long timestamp = offsetDateTime.toInstant().toEpochMilli();

// 如果需要秒级时间戳,用下面的代码
// Long secondTimestamp = offsetDateTime.toInstant().getEpochSecond();

方案2:Java 7及以下兼容方式(注意线程安全)

如果项目仍在使用Java 7或更早版本,只能用SimpleDateFormat处理,但要注意**SimpleDateFormat是非线程安全的**,不要在多线程环境下共享实例:

  • 编写匹配ISO格式的格式串"yyyy-MM-dd'T'HH:mm:ssXXX"
  • 解析字符串为Date对象
  • 调用getTime()获取毫秒级时间戳(Long类型)

代码示例:

String startTime = "2022-10-19T14:31:22+00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");

try {
    Date date = sdf.parse(startTime);
    // 转换为毫秒级时间戳(Long类型)
    Long timestamp = date.getTime();
    
    // 如果需要秒级时间戳,用下面的代码
    // Long secondTimestamp = date.getTime() / 1000;
} catch (ParseException e) {
    // 处理解析异常
    e.printStackTrace();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:50:18