Java中如何将2017-08-01T16:00:00-04:00转为时间戳?代码报错求助
搞定Java日期转时间戳的问题
嘿,我瞅了下你的代码,问题主要出在两个地方,咱们一步步来修正:
1. 格式化模式写错了
你用的"yyyy-MM-dd'T'HH:mm:ss-mm:ss"完全不对——原字符串末尾的-04:00是时区偏移量,不是重复的分钟秒,你得用对应的格式符(比如XXX)来匹配它,而不是瞎写-mm:ss。
2. 选了错误的日期类
LocalDate只负责处理“年-月-日”这种纯日期信息,根本管不了时间和时区偏移。你的字符串明明包含完整的时间和时区,得用OffsetDateTime才能正确解析。
修正后的可运行代码
import java.time.OffsetDateTime; import java.time.format.DateTimeFormatter; public class DateConversion { public static void main(String[] args) { String dateString = "2017-08-01T16:00:00-04:00"; // 用Java预定义的ISO格式,完美匹配你的字符串结构 DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME; // 用OffsetDateTime解析带时区偏移的完整日期时间 OffsetDateTime offsetDateTime = OffsetDateTime.parse(dateString, formatter); // 转成毫秒级时间戳 long timestamp = offsetDateTime.toInstant().toEpochMilli(); System.out.println("解析后的日期时间: " + offsetDateTime); System.out.println("对应的毫秒时间戳: " + timestamp); // 如果要秒级时间戳,用这个:offsetDateTime.toInstant().getEpochSecond() } }
额外小提示
如果你不想用预定义的ISO_OFFSET_DATE_TIME,也可以自定义格式字符串:DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX"),XXX就是用来匹配-04:00这种时区偏移的格式符。
内容的提问来源于stack exchange,提问作者Stranger95
相关产品推荐
相关产品推荐

