# 显示的农历月份比实际少一个月

#### 问题现象

显示农历日期，日数是对的，但月份比实际少一个月，如2025年7月9日对应的农历日期应为6月15日，但显示为5月15日。

#### 背景知识

*   i18n.getCalendar：获取指定区域和历法的日历对象。
    *   i18n.getCalendar('zh-Hans', 'chinese')：获取中国农历历法日历对象。
*   Calendar：日历对象。
    *   setTime：设置日历对象内部的时间、日期。
    *   get('month')：获取日历对象中月份的值。注意月份从0开始计数，例如0表示一月。

#### 问题定位

1.  检查代码中获取的日历对象是否是中国农历历法，即i18n.getCalendar的第二个参数（type）是否为字符串'chinese'。
2.  get('month')获取的月份是从0开始计数，排查代码中是否在获取月份时对数值做了+1处理，错误代码如下所示：
    
    ```
    import { i18n } from '@kit.LocalizationKit';
    
    // 获取中国农历历法
    let calendar: i18n.Calendar = i18n.getCalendar('zh-Hans', 'chinese');
    // 显示的月份数=calendar.get('month')将导致比实际月份数少1
    let month: number = calendar.get('month');
    ```
    

#### 分析结论

因问题现象为日数正确、月份数比实际月份少1个月，所以可能的问题原因为显示农历月份时，直接显示了calendar.get('month')获取到的月份数，没有在此基础上+1。

#### 修改建议

显示月份时，在calendar.get('month')获取到的月份数上+1，得到实际的月份。

```
import { i18n } from '@kit.LocalizationKit';

// 获取中国农历历法
let calendar: i18n.Calendar = i18n.getCalendar('zh-Hans', 'chinese');
// 显示的月份数=calendar.get('month')+1
let month: number = calendar.get('month') + 1;
```