公元纪年与天干地支的换算

公元纪年与干支纪年的相互转换方法

公元纪年👉干支纪年

将天干地支编号如下:

天干

  • 4甲  5乙  6丙  7丁  8戊  9己  0庚  1辛  2壬  3癸

地支

  • 4子  5丑  6寅  7卯  8辰  9巳  10午  11未  0申  1酉  2戌  3亥

方法是:

先以公元年的尾数在天干中找出相对应。然后,将公元纪年除以12,用余数在地支中找出相对应的地支。公元纪年就换算成了干支纪年。

如:

  • 公元1898年,尾数8,对应天干,1898÷12=158…2,余数2对应地支,即农历戊戌年。

  • 公元1920年,尾数0,对应天干,1920÷12=160…0,余数0对应地支,即农历庚申年。


公元前纪年👉干支纪年

将天干地支编号如下:

天干

  • 7甲  6乙  5丙  4丁  3戊  2己  1庚  0辛  9壬  8癸

地支

  • 9子  8丑  7寅  6卯  5辰  4巳  3午  2未  1申  0酉  11戌  10亥

具体方法同上。

如:

  • 公元前770年,尾数0,对应天干,770÷12=64…2,余数2,对应地支,即农历辛未年。

  • 公元前4年,尾数4天干,4÷12=0…4,余数4,对应地支,即农历丁巳年。


干支纪年👉公元前/后纪年

这里应该不必多说了……

在C语言中,将公元纪年转换为天干地支(也称为干支纪年法)需要一些计算字符串处理步骤。这里是一个简化的示例,展示了如何实现这个功能: 首先,我们需要知道天干地支的基本周期: - 天干有十个:甲、乙、丙、丁、戊、己、庚、辛、壬、癸。 - 地支有十二个:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。 然后,我们按照以下步骤转换: 1. 确定天干:天干由公元纪年的年份除以10的余数决定。例如,1985年年份除以10余数为5,对应的天干就是“庚”。 2. 确定地支:地支是由公元纪年的年份对12取余数,并结合世纪位(如果不足100年则不需要考虑),得出的地支。例如,1985年年份为20世纪,去掉前两位得到55,除以12余数为7,对应地支是“辰”。 下面是一个简单的C函数示例,假设输入的year是以整数形式表示的公元年份: ```c #include <stdio.h> #include <string.h> char get_gan_zhi(int year) { const char* gans[] = {"甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"}; const char* dians[] = {"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"}; int gan_index = year % 10; // 天干 int diao_index = (year % 100 + year / 100 * 12) % 12; // 地支 return gans[gan_index] + dians[diao_index]; } int main() { int year; printf("请输入一个公元年份:"); scanf("%d", &year); char result[6]; // 存储天干地支,最大长度为6(包括空格) strncpy(result, get_gan_zhi(year), sizeof(result)); result[sizeof(result)-1] = '\0'; // 添加终止符 printf("公元%04d年的天干地支为:%s\n", year, result); return 0; } ``` 请注意,这个函数仅适用于公历范围内的年份转换,对于其他历法系统可能不适用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值