在.net2.0 的版本中的 System.Globalization.ChineseLunisolarCalendar 是针对中国的日历类,公历与中国传统农历纪年之间的相互转换,利用它可以计算天干地支等有关农历的信息。

使用

static ChineseLunisolarCalendar cCalendar = new ChineseLunisolarCalendar();
cCalendar.MaxSupportedDateTime 返回支持的最大日期,即2101-1-28
cCalendar.MinSupportedDateTime  返回支持的最小日期,即1901-2-19
 
下面我们来实现公历转农历。
/// <summary>
/// 根据公历获取农历日期
/// </summary>
/// <param name="datetime">公历日期</param>
/// <returns></returns>
public static string GetChineseDateTime(DateTime datetime)
{int lyear = cCalendar.GetYear(datetime);int lmonth = cCalendar.GetMonth(datetime);int lday = cCalendar.GetDayOfMonth(datetime);//获取闰月, 0 则表示没有闰月int leapMonth = cCalendar.GetLeapMonth(lyear);bool isleap = false;if (leapMonth > 0){if (leapMonth == lmonth){//闰月isleap = true;lmonth--;}else if (lmonth > leapMonth){lmonth--;}}return string.Concat(GetLunisolarYear(lyear), "年", isleap ? "闰" : string.Empty, GetLunisolarMonth(lmonth), "月", GetLunisolarDay(lday));}

测试的结果:

传入日期:2010-3-4

返回农历:庚寅[虎]年正月十九

可以满足简单的需求啦。

其他代码也附上:

#region 农历年/// <summary>
/// 十天干
/// </summary>
private static string[] tiangan = { "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" };/// <summary>
/// 十二地支
/// </summary>
private static string[] dizhi = { "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" };/// <summary>
/// 十二生肖
/// </summary>
private static string[] shengxiao = { "鼠", "牛", "虎", "免", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪" };/// <summary>
/// 返回农历天干地支年
/// </summary>
/// <param name="year">农历年</param>
/// <returns></returns>
public static string GetLunisolarYear(int year)
{if (year > 3){int tgIndex = (year - 4) % 10;int dzIndex = (year - 4) % 12;return string.Concat(tiangan[tgIndex], dizhi[dzIndex], "[", shengxiao[dzIndex], "]");}throw new ArgumentOutOfRangeException("无效的年份!");
}       #endregion
#region 农历月/// <summary>
/// 农历月
/// </summary>
private static string[] months = { "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二(腊)" };/// <summary>
/// 返回农历月
/// </summary>
/// <param name="month">月份</param>
/// <returns></returns>
public static string GetLunisolarMonth(int month)
{if (month < 13 && month > 0){return months[month - 1];}throw new ArgumentOutOfRangeException("无效的月份!");
}#endregion
#region 农历日/// <summary>
///
/// </summary>
private static string[] days1 = { "初", "十", "廿", "三" };/// <summary>
/// 日
/// </summary>
private static string[] days = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" };/// <summary>
/// 返回农历日
/// </summary>
/// <param name="day"></param>
/// <returns></returns>
public static string GetLunisolarDay(int day)
{if (day > 0 && day < 32){if (day != 20 && day != 30){return string.Concat(days1[(day - 1) / 10], days[(day - 1) % 10]);}else{return string.Concat(days[(day - 1) / 10], days1[1]);}}throw new ArgumentOutOfRangeException("无效的日!");
}#endregion

还有一个根据日期获取生肖的代码:

/// <summary>
/// 返回生肖
/// </summary>
/// <param name="datetime">公历日期</param>
/// <returns></returns>
public static string GetShengXiao(DateTime datetime)
{return shengxiao[cCalendar.GetTerrestrialBranch(cCalendar.GetSexagenaryYear(datetime)) - 1];
}
 

一切都变的简单了。

转载于:https://www.cnblogs.com/huxj/archive/2010/03/04/1678160.html

ChineseLunisolarCalendar 农历日期相关推荐

  1. mysql 获取农历年份_iOS 获取公历、农历日期的年月日

    iOS 获取公历.农历日期的年月日 介绍三种方法获取 Date (NSDate) 的年月日. 用 date 表示当前日期.测试日期为公历 2017 年 2 月 5 日,农历丁酉年,鸡年,正月初九. l ...

  2. 根据公历日期获取到农历日期信息(带星座)(C#)

    直接上码,都有注释说明 using System; using System.Collections.Generic; using System.Globalization; using System ...

  3. Unity-获取农历日期

    项目开发需要计算获取农历日期,但是C#的ChineseLunisolarCalendar在Unity里没法使用,因时间关系,没有查明具体问题原因. 下面给出一个Unity可以直接使用的代码. 备注:参 ...

  4. [原创]自定义公历农历日期选择器

    公历农历日期选择器 项目地址:https://github.com/Carbs0126/GregorianLunarCalendar android自带的DatePicker具有日期选择的功能,但是由 ...

  5. 个人永久性免费-Excel催化剂功能第34波-提取中国身份证信息、农历日期转换相关功能...

    这两天又被刷朋友圈,又来了一个自主研发红芯浏览器,国产啊国产,这是谁的梦.就算国产了,自主了,无底线的夸大吹嘘无道德,企业如是,国家如是,大清已亡!再牛B的技术落在天天删敏感信息.无法治.无安全感可言 ...

  6. php 获取农历,PHP通过新历获取农历日期的方法

    PHP通过新历获取农历日期的方法 array(8,0,0,0,0,0,0,0,0,0,0,0,29,30,7,1), 1=>array(0,29,30,29,29,30,29,30,29,30, ...

  7. Borax.Lunardate:中国农历日期

    原文地址:https://kinegratii.github.io/2019/01/05/lunardate-module/ 感谢原作者!本人只是搬运工.看完这个和上一篇基本对农历就有了一个较全面的认 ...

  8. C# 农历日期帮助类

    using System;namespace DotNet.Utilities {/// <summary>/// 农历属性/// </summary>public class ...

  9. Unity UGUI自制日历控件 带农历日期

    新手小白无聊时做的一个 日历控件,需要的朋友可以借鉴下,高手大神也可以指点一下. 核心代码 获取某年某月有多少天 /// 获取某年某月有多少天/// </summary>/// <p ...

  10. c语言万年历农历转公历,公历日期与农历日期的相互转换程序

    公历日期与农历日期的相互转换程序 //********************************** // 公历日期与农历日期的相互转换程序 // 公元1800年1月25日-2101年1月28日 ...

最新文章

  1. Java的Redis连接池代码性能不错
  2. Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
  3. 静态时序分析——单周期
  4. 请写出至少5个html块元素标签_34道常见的HTML+CSS面试题(附答案)
  5. python函数递归 汉诺塔
  6. 好的测试用例应能证明软件是正确的.,好的测试用例应能证明软件是正确的。...
  7. 论文笔记_S2D.20_2017-ICCV-从单张RGB图像到精确尺度深度图评估的一种双支网络
  8. OpenCV与机器视觉
  9. 基于Java的学生成绩管理系统
  10. UART、IIC以及SPI通信协议
  11. Scala安装和开发环境配置教程
  12. 2020switch电信最快的dns_《2020switch电信最快的dns》电影_2020switch电信最快的dns正片免费观看-扬州人才服务网...
  13. python编程包有什么用_一文提升你的编程能力,全面理解Python包的定义,拿走不谢...
  14. 这一周我学习了什么(一)
  15. 布同:基于JQuery的五子棋人机对战游戏设计与制作
  16. oracle 存储打印输出,word2016打印输出 oracle 打印输出
  17. RPC(管理端口的服务)NFS软件 NFS配置文件 简单介绍
  18. 韩松手机摄影笔记第三课--经营画面的原则
  19. Android rom开发:最完整的截屏方案(支持全屏截屏+区域截屏)
  20. 直播预告| 手机银行智能人机验证方案直播,开课啦~

热门文章

  1. python编写摇骰子游戏_python摇骰子猜大小的小游戏
  2. 【Linux应用】Clonezilla使用指南
  3. lt18i android 2.3.4典藏版,索尼LT18i一键ROOT教程工具 2.3.4已亲测成功
  4. 动画3D变形:平移、旋转、缩放
  5. 自己实现一个Starter
  6. 网络安全从零开始(基础知识)
  7. 2020还是AI最火?推荐几本深度学习的书籍帮你入门!
  8. Si24R2F+超低功耗高性能2.4GHz无线射频NTC测温单发射芯片 兼容Si24R2E
  9. (半)自动批量添加QQ好友
  10. 董明珠为什么选择长沙?