以天干地支计算日期是我国悠良的传统文化,最近在看如何计算人的生辰八字,写了个程序,但是只能算年的干支,月、日的干支计算方法太复杂了,望之只能却步,还是乖乖去查万年历比较好。这里记下关于干支的一些东西。

一、干支与岁星纪年的对应

十天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸(guǐ)。
       十二地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。

岁星纪年干支表示:

岁星纪年十干曰:阏逢(yān féng)、旃蒙(zhān méng)、柔兆(róu zhào)、强圉(qiáng yǔ)、著雍(zhù yōng)、屠维(tú wéi)、上章(shàng zhāng)、重光(chóng guāng)、玄黓(xuán yì)、昭阳。

岁星纪年十二支曰:困敦(kùn dūn)、赤奋若(chì fèn ruò)、摄提格(shè tí gé)、单阏(chán yān)、执徐(zhí xú)、大荒落(dà huāng luò)、敦牂(dūn zāng)、协洽(xié qià)、涒滩(tūn tān)、作噩(zuò è)、阉茂(yān mào)、大渊献。

六十花甲子、生肖、时辰:

子鼠 丑牛 寅虎 卯兔 辰龙 巳蛇 午马 未羊 申猴 酉鸡 戌狗 亥猪
子时
(23-1)
丑时
(1-3)
寅时
(3-5)
卯时
(5-7)
辰时
(7-9)
巳时
(9-11)
午时
(11-13)
未时
(13-15)
申时
(15-17)
酉时
(17-19)
戌时
(19-21)
亥时
(21-23)
01.甲子 02.乙丑 03.丙寅 04.丁卯 05.戊辰 06.己巳 07.庚午 08.辛未 09.壬申 10.癸酉
11.甲戌 12.乙亥 13.丙子 14.丁丑 15.戊寅 16.己卯 17.庚辰 18.辛巳 19.壬午 20.癸未
21.甲申 22.乙酉 23.丙戌 24.丁亥 25.戊子 26.己丑 27.庚寅 28.辛卯 29.壬辰 30.癸巳
31.甲午 32.乙未 33.丙申 34.丁酉 35.戊戌 36.己亥 37.庚子 38.辛丑 39.壬寅 40.癸卯
41.甲辰 42.乙巳 43.丙午 44.丁未 45.戊申 46.己酉 47.庚戌 48.辛亥 49.壬子 50.癸丑
51.甲寅 52.乙卯 53.丙辰 54.丁巳 55.戊午 56.己未 57.庚申 58.辛酉 59.壬戌 60.癸亥

二、干支纪年程序

目前只能纪年,月、日、时待补充,预计猴年马月补充完(狗头)~
       eightword.h

#ifndef __EIGHTWORD__
#define __EIGHTWORD__
#include<stdio.h>#define CENTURY_20 4.6295
#define CENTURY_21 3.87
#define CENTURY_22 4.15char tianGan[10][3] = { "甲", "乙", "丙", "丁", "戊", \"己", "庚", "辛", "壬", "癸" };char diZhi[12][3] = { "子", "丑", "寅", "卯", "辰", "巳", "午", \"未", "申", "酉", "戌", "亥" };void PrintYiJiaZi()
{int jiaZi = 60;int tianGanNum = 0, diZhiNum = 0;printf("天干:");for (int i = 0; i < 10; i++) {printf("%c%c%c ", tianGan[i][0], tianGan[i][1], tianGan[i][2]);}printf("\n地支:");for (int j = 0; j < 12; j++) {printf("%c%c%c ", diZhi[j][0], diZhi[j][1], diZhi[j][2]);}printf("\n\n");printf("六十花甲子:\n");while ( jiaZi > 0) {if (tianGanNum == 10) {tianGanNum = 0;}if (diZhiNum == 12) {diZhiNum = 0;printf("\n");}printf("%c%c%c%c%c%c ", tianGan[tianGanNum][0], tianGan[tianGanNum][1],tianGan[tianGanNum][2],diZhi[diZhiNum][0],diZhi[diZhiNum][1], diZhi[diZhiNum][2]);tianGanNum++;diZhiNum++;jiaZi--;}printf("\n");
}void YearGanZhi(int year, char y_GanZhi[2][3], int gan)
{printf("请输入年份(如:1944):\n");printf("tips:公元1年为辛酉年,纪月依据夏历,正月建寅~~\n");scanf("%d",&year);gan = (year + 6) % 10;int zhi = (year + 8) % 12;for (int i= 0; i < 3; i++) {y_GanZhi[0][i] = tianGan[gan][i];}for (int j= 0; j < 3; j++) {y_GanZhi[1][j] = diZhi[zhi][j];}printf("%c%c%c%c%c%c\n", y_GanZhi[0][0], y_GanZhi[0][1], y_GanZhi[0][2], y_GanZhi[1][0], y_GanZhi[1][1], y_GanZhi[1][2]);
}void MonthGanZhi(int month, int year, char m_GanZhi[2][3], int gan)
{printf("根据下面的口诀及年天干推断月柱\n");printf("甲己之年丙作首,\n");printf("乙庚之岁戊为头,\n");printf("丙辛必定寻庚起,\n");printf("丁壬壬位顺行流,\n");printf("更有戊癸何方觅,\n");printf("甲寅之上好追求.\n\n");int liChun = (year % 100 * 0.2422 + CENTURY_21) - ((year % 100 - 1) / 4);
}void DayGanZhi(int gan)
{printf("根据下面的口诀及日天干推断时柱\n");printf("甲己还生甲,\n");printf("乙庚丙作初,\n");printf("丙辛从戊起,\n");printf("丁壬庚子居,\n");printf("戊癸何方始,\n");printf("壬子是真途.\n\n");
}#endif

eightword.c

#include "eightword.h"int main(int argc, char* argv[])
{int year, month;int gan = 0;char y_GanZhi[2][3] = {"0"};char m_GanZhi[2][3] = {"0"};char d_GanZhi[2][3] = {"0"};char h_GanZhi[2][3] = {"0"};PrintYiJiaZi();YearGanZhi(year, y_GanZhi, gan);MonthGanZhi(month, year, m_GanZhi, gan);DayGanZhi(gan);printf("\n");return 0;
}


       这里顺便打印了干支及一个甲子,干支纪月和干支纪时可以根据后面的两个口诀,很容易理解,比写代码容易理解多了。

三、干支纪月

干支纪月可以根据口诀:
                                          甲己之年丙作首,
                                          乙庚之岁戊为头,
                                          丙辛必定寻庚起,
                                          丁壬壬位顺行流,
                                          更有戊癸何方觅,
                                          甲寅之上好追求.
来自己推算。
       当知道了年份的天干,就可以根据口诀推算出月份的天干,而月份的地支根据夏历,正月建寅,即正月就是寅月,二月就是卯月,以此类推。
例如2022年的农历七月,2022年是壬寅年,根据“丁壬壬位顺行流”可知2022年的正月的天干是壬,而农历七月是申月,所以2022年七月的干支大概就是戊申。
       为什么要说大概呢?
       因为干支纪月的寅月是从春分这天开始计算的,而且每个月也都是根据二十四节来区分的。

根据口诀及二十字节有:

农历 地支 节气 中气 近似公历 甲或己年 乙或庚年 丙或辛年 丁或壬年 戊或癸年
正月 寅月 立春-惊蛰 雨水 2月 丙寅月 戊寅月 庚寅月 壬寅月 甲寅月
二月 卯月 惊蛰-清明 春分 3月 丁卯月 己卯月 辛卯月 癸卯月 乙卯月
三月 辰月 清明-立夏 谷雨 4月 戊辰月 庚辰月 壬辰月 甲辰月 丙辰月
四月 巳月 立夏-芒种 小满 5月 己巳月 辛巳月 癸巳月 乙巳月 丁巳月
五月 午月 芒种-小暑 夏至 6月 庚午月 壬午月 甲午月 丙午月 戊午月
六月 未月 小暑-立秋 大暑 7月 辛未月 癸未月 乙未月 丁未月 己未月
七月 申月 立秋-白露 处暑 8月 壬申月 甲申月 丙申月 戊申月 庚申月
八月 酉月 白露-寒露 秋分 9月 癸酉月 乙酉月 丁酉月 己酉月 辛酉月
九月 戌月 寒露-立冬 霜降 10月 甲戌月 丙戌月 戊戌月 庚戌月 壬戌月
十月 亥月 立冬-大雪 小雪 11月 乙亥月 丁亥月 己亥月 辛亥月 癸亥月
十一月 子月 大雪-小寒 冬至 12月 丙子月 戊子月 庚子月 壬子月 甲子月
十二月 丑月 小寒-立春 大寒 1月 丁丑月 己丑月 辛丑月 癸丑月 乙丑月

所以我到了干支纪月的这一步直接撞了南墙了,干支纪日更不用说了,还是查万年历,嘿嘿,万年历真好,嘿嘿。

四、干支计时

干支纪时可根据日的干支及口诀:
                                          甲己还生甲,
                                          乙庚丙作初,
                                          丙辛从戊起,
                                          丁壬庚子居,
                                          戊癸何方始,
                                          壬子是真途.
来计算。

如2022年3月18日14时,年月日直接查万年历:
       2022年3月18日
       星期五农历二月十六
       壬寅年(虎年) 癸卯月 庚午日
       宜:解除 扫舍 馀事勿取
       忌:诸事不宜
       日的天干为庚,根据“乙庚丙作初”可知这一天的子时是丙子时,而14时的地支是未,也就是未时,天干则是癸,即14时是癸未时。所以这一天(2022年3月18日 )14时出生的人的八字就是:壬寅 癸卯 庚午 癸未。

新时代的青年当求实上进,团结友爱,为实现中华民族的伟大复兴而努力~

关于天干地支及其计算相关推荐

  1. 农历中天干地支的计算【C代码】

    [本程序在DEV C++ 4.9.9.2 下编译通过] 有关农历的东西有以下几篇文章: 计算某天是星期几[C代码] 农历算法简介以及公式 农历中天干地支的计算[C代码] 农历一百年算法(1921~20 ...

  2. c语言输出天干地支,农历中天干地支的计算【C代码】

    [本程序在DEV C++ 4.9.9.2 下编译通过] 有关农历的东西有以下几篇文章: 计算某天是星期几[C代码] 农历算法简介以及公式 农历中天干地支的计算[C代码] 农历一百年算法(1921~20 ...

  3. c语言万年历算天干地支,万年历计算 之 干支

    1.基本知识 中国古代的一种纪年法.即以甲.乙.丙.丁.戊.己.庚.辛.壬.癸为十干,子.丑.寅.卯.辰.巳.午.未.申.酉.戌.亥为十二支,把干.支顺序配合.如甲子.乙丑等,经过六十年又回到甲子.周 ...

  4. 用c语言程序编写天干地支,农历中天干地支的计算【C代码】

    [本程序在DEV C++ 4.9.9.2 下编译通过] 有关农历的东西有以下几篇文章: /* 函数名称:int GetChineseEra(int year,int flag) 函数功能: 返回某年对 ...

  5. 天干地支计算公式_天干地支主怎样计算?

    回答:少女时代 级别:硕士研究生 2009-01-08 20:34:04 来自:贵州省贵阳市 我国古代是用天干地支来纪年的,现代社会已很少使用.一来现今社会已经离不开国际化,沿用老的历法已经不现实:二 ...

  6. 出生时辰转天干地支 c语言算法,生辰八字天干地支转换

    我们当前通用的公元年,也叫做西历年.纪年,源自西方社会的纪年法,是从耶稣诞生的那一年开始计算.是从辛亥后,也就是年开始采用公元纪年法,在这之前,我们采用的都是干支年法. 干支,也就是天干和地支,传说出 ...

  7. 天干地支计算年月日时

    因过年前家里进伙(乔迁),让当地的先生选了时辰,通过对天干地支的了解,对古人的智慧尤为惊叹,因此,学习了一下.特此,记录所学内容. 天干地支,简称为干支,源自中国远古时代对天象的观测 天干:" ...

  8. java 从已知日期计算干支纪日_天干地支纪日纪时计算公式

    年:每个干支为一年,六十个干后,又从头算起,周而复始,循环不息.由甲子开始,满六十年称做一甲子或一花甲子.称为干支纪年法. 月:正月是由寅开始,每个月的地支固定不变,然后依次与天干组合:由第一年的正月 ...

  9. java 从已知日期计算干支纪日_天干地支纪日怎么计算?

    年:每个干支为一年,六十个干后,又从头算起,周而复始,循环不息.由甲子开始,满六十年称做一甲子或一花甲子.称为干支纪年法.月:正月是由寅开始,每个月的地支固定不变,然后依次与天干组合:由第一年的正月丙 ...

最新文章

  1. JMeter打开脚本报错处理方法
  2. Oracle 小知识点
  3. 生产环境下JAVA进程高CPU占用故障排查
  4. 菜鸟的 Sass 学习笔记
  5. 04:网络层协议介绍
  6. linux dns中文域名,Nginx 中文域名配置详解及实现
  7. 前端每日实战:114# 视频演示如何用纯 CSS 和混色模式创作一个 loader 动画
  8. MVC Model验证
  9. drbd实现mysql地热备_Mysql+DRBD+Heartbeat 实现mysql高可用的双机热备(mysql+heartbeat篇)...
  10. 项目管理的三大目标即时间、成本和质量
  11. linux无线网卡连不上网,Ubuntu 16.04无线网卡不见,无法用WiFi上网的解决方法
  12. asp.net控件开发基础系列
  13. 你了解语音识别技术吗?
  14. Oracle SQL查询,日期过滤条件要注意的一点
  15. 【AI案例实践】基于深度学习的超分辨率技术
  16. 爱思服务器可以下小组件,iOS14 小组件添加/删除方法教程
  17. 计算机操作系统 学习笔记(第四版 汤小丹)(上)
  18. 工信部就垃圾短信问题约谈7家虚拟运营商
  19. [Odoo] Odoo 上传附件 attachment
  20. vscode用tensorboard报错 We failed to start a TensorBoard session due to the following error: Command fa

热门文章

  1. 北安服务器维修,北安停车场收费系统企业
  2. 第十三届蓝桥杯省赛B组 第10题(LCDS?找规律.)
  3. html中看板娘添加,如何在自己开发的web中放入“看板娘”
  4. 工作时间计算(节假日,调休,周末,加班,正常时间)
  5. 基于大数据的用户画像构建小百科全书
  6. HJ107 求解立方根
  7. 【调剂】江苏科技大学2022年硕士研究生招生调剂预告
  8. VPS8505 微功率隔离电源专用芯片2.3-6VIN/24V/1A 功率管 替代金升阳模块
  9. upload-labs通关记录
  10. 基于Python深度学习的文字检测识别系统