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

处理日式年月日期(2020年7月)时SimpleDateFormat输出错误求助

问题分析与解决

哦,这个坑我之前也踩过!你遇到的问题核心是把YYYY和yyyy搞混了——这俩写法看起来差不多,但实际含义差老远了:

  • YYYY代表的是周年份(Week Year):它是按周来划分的年份,一年的第一周必须包含该年的第一个周四(不同地区规则可能略有差异),所以12月底的部分日期可能会被归到下一年的周年份,年初的部分日期也可能被算到上一年的周年份里。
  • yyyy代表的是日历年(Calendar Year):就是我们日常用的、按1月1日到12月31日划分的常规年份。

你用YYYY来解析和格式化日期,就会让程序错误地把日期关联到周年份的周期里,最终输出了完全不对的月份。

修正后的代码

把所有的YYYY替换成yyyy就能解决问题:

val inputFormat = SimpleDateFormat("yyyy年M月")
val date = inputFormat.parse("2020年7月")
val outputText = SimpleDateFormat("yyyy/MM").format(date)

运行这段代码后,输入“2020年7月”就会正确输出2020/07啦。

额外小建议

如果你是在Android 8.0+或者Java 8及以上环境开发,非常推荐使用java.time包下的新日期API(比如DateTimeFormatter、LocalDate)——它的设计更清晰,完全避免了SimpleDateFormat的线程不安全问题,也不容易出现这类格式符混淆的情况:

import java.time.LocalDate
import java.time.format.DateTimeFormatter

val inputFormatter = DateTimeFormatter.ofPattern("yyyy年M月")
val date = LocalDate.parse("2020年7月", inputFormatter)
val outputText = date.format(DateTimeFormatter.ofPattern("yyyy/MM"))

新API用起来更省心,以后处理日期相关的需求可以优先考虑它~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:37:52