【.net 深呼吸】获取日期的干支纪年
其实,中国的农历是用干支纪年法的,“干支”即,十天干与十二地支。
十天干为:甲、乙、丙、丁、戊、己、庚、辛、壬、癸。
十二地支为:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。
十天干的含义如下:
甲—— 草木破土而出,万物始生。
乙—— 草木初长,即“轧”,此过程充满艰辛,如同被碾轧一般,此过程最能考验生命的坚韧程度。
丙—— 即“炳”,草木得到充足阳光以成长。
丁—— 阳光水分充沛,草木茁壮成长,就像一位健壮青年(人丁)。
戊—— 积木成林,树木繁茂。
己—— 即“纪”,指草木初现名状,可被辨识。
庚—— 即“更”,更新,从此刻起草木将要繁衍下一代,生生不息。
辛—— 尝到收成的甘甜。
壬—— 即“妊”,孕育后代。
癸—— 即“揆”。生生死死,死死生生,周而复始。
十二地支的含义:
子—— 道生一,一生二。
丑—— 即“纽”,阴阳二气欲合未合之势。
寅—— 三生万物,草木初长。
卯—— 即“茂”,草木茂盛。
辰—— 即“震”。《易》经中的【震卦】,生命因萌动而生。
巳—— 阴气含于阳气。草木生长态势良好,一片欣欣向荣的景象。即将到人生颠峰。
午—— 事业有成,登上人生辉煌。
未—— 即“味”,登上事业顶峰,尝到了功成名就滋味。
申—— 顶盛。此时要小心,亢龙有悔,盛极之后将走向衰败,泰极否来。
酉—— 老,步入老年,此时应该开始积淀人生。
戌—— 即“灭”。死亡,一切归于虚无。
亥—— 即“核”。新的种子即将发芽,开启新的生命。
不管是十天干,还是十二地支,归结起来就是:生老病死。
在 System.Globalization 命名空间下,提供了一个基于东方文化的日历管理类 EastAsianLunisolarCalendar,它所派生出来的类型,可用于中国、日本、朝鲜等东方国家的日历操作。
要获得中国农历相关的信息,可以使用 ChineseLunisolarCalendar 类。调用 GetYear 方法可以获取指定公历日期的农历年份,GetMonth 方法返回公历日期中月份所对应的农历月份。当然,你还可以用 IsLeapYear 或 IsLeapMonth 方法来判断某年某月是否为闰年 / 闰月。
此处我们要获取年份的干支纪年值,可以调用 GetSexagenaryYear 方法,它返回 1 到 60 的值,表示在干支纪年中的顺序。前面老周讲了十天干和十二地支的内含。干支记时法就是把十天干和十二地支按顺序组合起来使用。比如天干中的甲,与地支中的子组合,为甲子;依此类推,乙丑,丙寅……
这样组合下去,正好产生60对组合,即每60出现一个甲子,因此,每一个甲子年就是相隔六十年,然后不断循环。
由于这些 API 所返回的都是数值,为了让其表示为汉字,我们可以分别为天干和地支声明枚举类型。
enum 天干
{
甲 = ,
乙,
丙,
丁,
戊,
己,
庚,
辛,
壬,
癸
} enum 地支
{
子 = ,
丑,
寅,
卯,
辰,
巳,
午,
未,
申,
酉,
戌,
亥
}
只需要将每个枚举中第一个成员标记为 1 即可,后面的它会自动增加,如乙为2,丙为3……
下面代码演示如何获取干支纪年。
ChineseLunisolarCalendar cncal = new ChineseLunisolarCalendar();
// 获取农历年份
int y = cncal.GetYear(seldate);
year.Text = y.ToString();
// 获取干支纪年值
int a = cncal.GetSexagenaryYear(seldate);
// 获取天干、地支
天干 tg = (天干)cncal.GetCelestialStem(a);
地支 dz = (地支)cncal.GetTerrestrialBranch(a); string msg = $"{tg}{dz}";
ganzhi.Text = msg;
先用 GetSexagenaryYear 方法返回指定公历年分的干支纪年顺序(1 - 60),把顺序值存到变量 a 中,然后,用 GetCelestialStem 方法从干支纪年中获得天干的顺序(1 - 10),因为是整数值,所以可以强制转换为我们上面定义的 天干 枚举。
同理,调用 GetTerrestrialBranch 方法,获取到干支纪年中地支的顺序(1 - 12),可以强制转换为 地支 枚举的值。
然后,我们可以测试一下。
先用 2017 - 6 - 2 来测试,结果如下。

我们再用 2016 - 1 - 1 来测试,结果如下。

有伙伴会问,2016年不是丙申年吗,是的,但是,看看农历年份,它还是2015年,16年元旦时,农历新年还未到。
我们可以把日期改为 2016 -7 - 1 ,再看看结果。

这时候就是丙申年了。
我们可以看看明年是什么年。

明年可以纪念“戊戌变法” 120 周年了。
好了,今天的内容就到此完成了。示例代码请猛点击这里下载。
【.net 深呼吸】获取日期的干支纪年的更多相关文章
- iOS 根据农历日期 获取当前的农历年份 即 干支纪年法算农历年
前言:我国古代是用干支纪年的,近代史上提到的甲午战争.戊戌变法.辛亥革命等名词就是干支纪年.所谓干支就是十天干和十二地支的简称.天干.地支按照一定规则(单配单,双配双)可以搭配成60对,也就是一个甲子 ...
- python 获取日期
转载 原文:python 获取日期 作者:m4774411wang python 获取日期我们需要用到time模块,比如time.strftime方法 time.strftime('%Y-%m-% ...
- jquery 获取日期时间
获取JavaScript 的时间使用内置的Date函数完成 var mydate = new Date();mydate.getYear(); //获取当前年份(2位)mydate.getFullYe ...
- java中获取日期和时间的方法总结
1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下: 要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...
- js中的各种获取日期
JS中获取当前时间点前一天时间 var date=new Date(); var dat_year=date.getYear(); var dat_month=date.getMonth(); var ...
- 通过shell脚本获取日期,并赋给变量
通过shell获取当前8位日期,并赋给变量,并且使用变量作为文件名,建立文件夹 代码如下: ls_date=`date +%Y%m%d` mkdir ${ls_date} 上面两句代码虽然简单 但是在 ...
- Js获取日期时间及其它操作
var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1 ...
- DateTime.ToString格式化日期,使用DateDiff方法获取日期时间的间隔数
一:DateTime.ToString格式化日期 二:代码 using System; using System.Collections.Generic; using System.Component ...
- SQL日期操作及只获取日期的方法
datepart()函数的使用 * datepart()函数可以方便的取到时期中的各个部分*如日期:2006-07--02 18:15:36.513* ...
随机推荐
- C/C++中的volatile究竟是什么鬼?
将变量或对象声明为volatile类型后,每次对变量的访问都是从其内存直接读取.那什么时候对变量的访问不是从其内存读取的呢?一种常见的情况就是编译器开启了优化选项,这时候对变量的访问有可能就是从寄存器 ...
- ionic项目结构解析
ionic项目结构解析 原始结构 创建一个IonicDemo项目 'ionic start IonicDemo sidemenu' 这种结构多模块开发比较麻烦,因为view跟controller分开路 ...
- Educational Codeforces Round 20.C
C. Maximal GCD time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- Unity3D 物体移动到指定点
transform.position=Vector3.MoveTowards(transform.position , Target.position, speed * Time.deltaTime) ...
- nodejs服务器部署教程二
这篇文章主要介绍如何在服务端跑vuejs的项目,如果上一篇教程你成功输出了hello world,那这一篇更简单 首先你要有一个已经能在本地跑的基于vuejs的项目,我就以之前写的仿饿了么的项目为例来 ...
- POJ 3984 路径输出
迷宫问题 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, ...
- html中的锚点
一.页面内跳转的锚点设置 页面内的跳转需要两步: 方法一: ①:设置一个锚点链接<a href="#miao">去找喵星人</a>:(注意:href属性的属 ...
- MongoDB数据库文档操作
前面的话 本文将详细介绍MongoDB数据库关于文档的增删改查 数据类型 在介绍文档操作之前,首先要了解MongoDB的数据类型 MongoDB支持许多数据类型,包括 1.字符串 - 这是用于存储数据 ...
- SSH连不上虚拟机的问题解决
这几天工作任务不重,今早上班打算在liunx下运行下python脚本.打开VM,SSH突然连不上虚拟机了.网上试了很多方法都不行,最后花费2个小时解决了这一问题. 结合我的实际情况,问题解决如下: 1 ...
- 理解Linux文件系统之inode
很少转发别人的文章,但是这篇写的太好了. 理解inode 作者: 阮一峰 inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统 ...