下面是公历年份 ? 天干地支年的常用换算算法。
1. 天干、地支顺序
天干 10 个
| 序号 | 天干 |
|||
| 0 | 甲 |
| 1 | 乙 |
| 2 | 丙 |
| 3 | 丁 |
| 4 | 戊 |
| 5 | 己 |
| 6 | 庚 |
| 7 | 辛 |
| 8 | 壬 |
| 9 | 癸 |
地支 12 个
| 序号 | 地支 |
|||
| 0 | 子 |
| 1 | 丑 |
| 2 | 寅 |
| 3 | 卯 |
| 4 | 辰 |
| 5 | 巳 |
| 6 | 午 |
| 7 | 未 |
| 8 | 申 |
| 9 | 酉 |
| 10 | 戌 |
| 11 | 亥 |
天干和地支按顺序组合,60 年一个循环,称为六十甲子。
2. 公历年份换算天干地支
公式:
```text
天干序号 = (年份 - 4) % 10
地支序号 = (年份 - 4) % 12
```
然后按照上面的表查即可。
3. 示例
示例一:2024 年
```text
天干 = (2024 - 4) % 10 = 2020 % 10 = 0
地支 = (2024 - 4) % 12 = 2020 % 12 = 4
```
0 对应 甲,4 对应 辰。
所以:
```text
2024 年 = 甲辰年
```
示例二:2025 年
```text
天干 = (2025 - 4) % 10 = 2021 % 10 = 1
地支 = (2025 - 4) % 12 = 2021 % 12 = 5
```
1 对应 乙,5 对应 巳。
所以:
```text
2025 年 = 乙巳年
```
示例三:1984 年
```text
天干 = (1984 - 4) % 10 = 1980 % 10 = 0
地支 = (1984 - 4) % 12 = 1980 % 12 = 0
```
所以:
```text
1984 年 = 甲子年
```
1984 年是一个常用的甲子年基准。
4. 天干地支反推年份
因为干支纪年 60 年一循环,所以同一个干支每隔 60 年出现一次。
例如:
```text
2024 年是甲辰年
```
那么其他甲辰年有:
```text
2024 ± 60n
```
例如:
```text
1964 年、2024 年、2084 年
```
都是甲辰年。
5. 快速记忆公式
可以记住:
```text
公元年份减 4
天干除以 10 取余
地支除以 12 取余
```
即:
```text
干 = (年 - 4) mod 10
支 = (年 - 4) mod 12
```
6. 注意:年份交界点问题
严格来说,干支纪年有两种常见用法:
1. 按农历春节换年
民俗中常见,例如生肖年通常按春节算。
2. 按立春换年
命理、八字中更常用,通常以立春作为干支年的开始。
所以如果日期在公历年初,比如 2024 年 1 月,需要判断是在春节前还是立春前。
例如:
```text
2024 年 1 月一般还不能直接算作甲辰年
```
若按立春,2024 年立春前仍属于上一干支年,即癸卯年。
7. 简单代码示例
JavaScript
```js
function ganzhiYear(year) {
const tiangan = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"];
const dizhi = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"];
const ganIndex = (year - 4) % 10;
const zhiIndex = (year - 4) % 12;
return tiangan[ganIndex] + dizhi[zhiIndex];

}
console.log(ganzhiYear(2024)); // 甲辰
console.log(ganzhiYear(2025)); // 乙巳
```
Python
```python
def ganzhi_year(year):
tiangan = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]
dizhi = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
gan_index = (year - 4) % 10
zhi_index = (year - 4) % 12
return tiangan[gan_index] + dizhi[zhi_index]
print(ganzhi_year(2024)) 甲辰
print(ganzhi_year(2025)) 乙巳
```
一句话:
```text
天干地支年 = 天干[(年份 - 4) % 10] + 地支[(年份 - 4) % 12]
```
