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

如何从“月份-年份”格式的字符串中获取上一个月与下一个月

实现方案

你可以直接在Activity/Fragment中维护一个全局的Calendar实例跟踪当前显示的月份,避免每次点击都解析文本内容,性能和稳定性更高,完整实现代码如下:

  1. 先在类内部声明全局变量
// 跟踪当前显示的日期
private Calendar currentCalendar;
// 统一使用同一个日期格式化实例,指定Locale避免多语言环境异常
private SimpleDateFormat monthFormat = new SimpleDateFormat("MMM-yyyy", Locale.getDefault());
  1. 初始化逻辑
// 首次进入默认显示当前月份
currentCalendar = Calendar.getInstance();
textView.setText(monthFormat.format(currentCalendar.getTime()));

// 下个月按钮点击事件
nextBtn.setOnClickListener(view -> {
    currentCalendar.add(Calendar.MONTH, 1);
    textView.setText(monthFormat.format(currentCalendar.getTime()));
});

// 上个月按钮点击事件
prevBtn.setOnClickListener(view -> {
    currentCalendar.add(Calendar.MONTH, -1);
    textView.setText(monthFormat.format(currentCalendar.getTime()));
});

注意事项

  • 格式化符号需要把你原来写的YYYY改为yyyy:YYYY是ISO周年纪年规则,年末年初的日期会显示错误年份,yyyy才是常规使用的公历年。
  • Calendar会自动处理跨年、月末跳转的边界情况,比如12月点下个月会自动跳转到下一年1月,1月点上个月会自动跳转到上一年12月,不需要你额外做边界判断。

如果你确实需要从TextView当前显示的文本解析日期再做修改,可以使用下面的实现:

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        try {
            String dateString = textView.getText().toString();
            SimpleDateFormat sdf = new SimpleDateFormat("MMM-yyyy", Locale.getDefault());
            Date date = sdf.parse(dateString);
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            // 加1为下个月,减1为上个月
            cal.add(Calendar.MONTH, 1);
            textView.setText(sdf.format(cal.getTime()));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 17:03:04