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
相关产品推荐
相关产品推荐

