Java/Kotlin如何正确解析NMEA时间戳解决字段冲突异常问题
问题根因
你写的日期匹配模式存在符号大小写误用的问题:
- 模式中大写的
DD代表年积日(即一年中的第几天,取值范围1~366),并不是你需要解析的「当月日期」字段 - 解析流程中,程序先读取前两位
12按年积日计算,得到对应日期为1月12日;紧接着读取MM位的07时,又得到月份为7月,两个字段推导出的月份值冲突,就抛出了你看到的异常。
修复方案
标准NMEA格式时间戳的字段顺序为:当日日期(dd) + 月份(MM) + 两位年份(yy) + 小时(HH) + 分钟(mm) + 秒(ss),你只需要把模式里代表年积日的大写DD,替换为代表「当月日期」的小写dd即可正常解析:
import java.time.LocalDateTime import java.time.format.DateTimeFormatter fun main() { println(LocalDateTime.parse("120722202122", DateTimeFormatter.ofPattern("ddMMyyHHmmss"))) }
上述代码运行后会输出正确的解析结果:2022-07-12T20:21:22,对应时间戳实际表示的2022年7月12日20点21分22秒。
内容的提问来源于stack exchange,提问作者AndreKR
相关产品推荐
相关产品推荐

