Java如何将2024-01-01T00:00:00.000Z格式日期字符串转为long型毫秒值
Java 转换ISO 8601格式日期字符串为时间毫秒值方案
错误原因
你使用的SimpleDateFormat模式yyyy-MM-dd'T'HH:mm:ss.SSSZ中,Z是用来匹配+0800这类数字时区格式的占位符,但你的输入日期字符串末尾的Z是字面量,代表UTC时区,两者格式不匹配导致解析失败。
正确实现方案
方案1:使用SimpleDateFormat(兼容Java 8以前版本)
需要把模式中的Z标记为字面量,同时显式设置解析时区为UTC,避免本地时区偏移导致结果错误:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); // 必须设置时区为UTC,否则会按照本地时区解析出现误差 sdf.setTimeZone(TimeZone.getTimeZone("UTC")); long res = sdf.parse(createdAt).getTime();
方案2:使用Java 8+ 新时间API(更推荐)
你输入的日期是标准ISO 8601格式,java.time.Instant类原生支持直接解析,且线程安全、代码更简洁:
long res = Instant.parse(createdAt).toEpochMilli();
内容的提问来源于stack exchange,提问作者Erez git
相关产品推荐
相关产品推荐

