Kotlin中如何将MMYYYY格式字符串正确解析为YearMonth类型
问题根因
你的日期格式模式写法错误:
- 模式中大写的
YYYY代表基于周的年份(week-based year),是和ISO周历规则绑定的特殊年份字段,不是日常使用的公历年,YearMonth解析时无法通过该字段获取构造所需的公历年值,会直接抛出DateTimeParseException - 表示四位数字公历年的正确模式字符是小写的
y,即四位年份对应模式为yyyy
修正后的实现代码
import java.time.YearMonth import java.time.format.DateTimeFormatterBuilder import java.util.Locale fun main() { val formatter = DateTimeFormatterBuilder() .parseCaseInsensitive() .appendPattern("MMyyyy") // 仅需把原模式里的YYYY替换为小写yyyy即可 .toFormatter(Locale.ENGLISH) // 测试解析 println(YearMonth.parse("011970", formatter)) // 控制台输出:1970-01,完全符合预期 }
补充说明
修正后的模式MMyyyy和你的MMYYYY格式要求完全匹配:MM对应带前导零的两位数字月份,yyyy对应四位数字年份,所有符合该长度规则的日期字符串都能正常解析,不需要额外做格式兼容处理。
内容的提问来源于stack exchange,提问作者Aswath
相关产品推荐
相关产品推荐

