You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何从Period.between()返回的字符串提取信息?

提取Period字符串中年、月、日值的通用方案

最优方案:直接用Period API(无需处理字符串)

完全没必要手动拆分返回的字符串,Period类本身就封装了直接获取年、月、日的方法,这是最靠谱高效的方式:

val period = Period.between(date1, date2)
val years = period.years
val months = period.months
val days = period.days

不管日期间隔是否包含年/月/日,这些方法都会返回对应数值,没有的部分直接返回0,完美适配所有场景。

若必须处理字符串的情况(比如仅拿到字符串结果)

如果因特殊原因只能操作返回的字符串,用正则表达式可以完美适配所有格式:

val periodStr = "P2Y3M5D" // 支持"P3M5D"、"P5D"、"P2Y"、"P1Y2D"等所有组合
val regex = Regex("P(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)D)?")
val matchResult = regex.find(periodStr)

val years = matchResult?.groups?.get(1)?.value?.toInt() ?: 0
val months = matchResult?.groups?.get(2)?.value?.toInt() ?: 0
val days = matchResult?.groups?.get(3)?.value?.toInt() ?: 0

正则说明:

  • P:匹配字符串开头的固定标识
  • (?:(\d+)Y)?:可选非捕获组,匹配数字加Y的组合,其中(\d+)是捕获组,用于提取年份数字;?表示该部分可缺失
  • (?:(\d+)M)?:同理匹配月份部分,可选
  • (?:(\d+)D)?:同理匹配日期部分,可选

无论哪一部分缺失,都能正确提取对应数值,缺失的部分会被赋值为0。

内容的提问来源于stack exchange,提问作者berry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:02:51