阴历与阳历的对照

很多人希望找到自己阴历对应的阳历是多少,对于这个非常简单的问题,万年历对于不经常上网的朋友竟然也是很困难,我决心解决这个问题。

下面我写了个Java小程序,利用了网上一些现有的资源,大家可以直接输入自己的阴历或者阳历生日,点“提交”就可以看到转变后的日期了。希望对大家有用。

http://three.freejsp.net/yuanqingfei/

 

感谢http://www.freejsp.net/?id=yuanqingfei提供空间支持

发信人: hjdwg (小鱼儿), 信区: MathTools        标  题: Re: 谁有阴历与阳历的对照 发信站: BBS 水木清华站 (Sat May 31 21:20:25 2003), 转信 巧了,我曾用matlab做了一个,现在贴上来。 function xx = LunarCalendar(y,m,d) %  function xx = LunarCalendar(y,m,d) %   %  农历查询,改编自某网页之JavaScript,欢迎改动 % %  Author:  hjdwg@0451.com if nargin==0;     cccc=clock;     y=cccc(1);m=cccc(2);d=cccc(3); end Animals={'鼠','牛','虎','兔','龙','蛇','马','羊','猴','鸡','狗','猪'}; solarTerm ={'小寒','大寒','立春','雨水','惊蛰','春分', ...         '清明','谷雨','立夏','小满','芒种','夏至', ...         '小暑','大暑','立秋','处暑','白露','秋分', ...         '寒露','霜降','立冬','小雪','大雪','冬至'}; CnDayStr={'初一', '初二', '初三', '初四', '初五', ...         '初六', '初七', '初八', '初九', '初十', ...         '十一', '十二', '十三', '十四', '十五', ...         '十六', '十七', '十八', '十九', '二十', ...         '廿一', '廿二', '廿三', '廿四', '廿五', ...         '廿六', '廿七', '廿八', '廿九', '三十'}; CnMonthStr= { '正', '二', '三', '四', '五', '六', '七', '八', '九', '十', '冬', '腊'}; monthName = {'JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'}; lunarInfo=[19416,19168,42352,21717,53856,55632,91476,22176,39632,21970, ...         19168,42422,42192,53840,119381,46400,54944,44450,38320,84343, ...         18800,42160,46261,27216,27968,109396,11104,38256,21234,18800, ...         25958,54432,59984,28309,23248,11104,100067,37600,116951,51536, ...         54432,120998,46416,22176,107956,9680,37584,53938,43344,46423, ...         27808,46416,86869,19872,42448,83315,21200,43432,59728,27296, ...         44710,43856,19296,43748,42352,21088,62051,55632,23383,22176, ...         38608,19925,19152,42192,54484,53840,54616,46400,46496,103846, ...         38320,18864,43380,42160,45690,27216,27968,44870,43872,38256, ...         19189,18800,25776,29859,59984,27480,21952,43872,38613,37600, ...         51552,55636,54432,55888,30034,22176,43959,9680,37584,51893, ...         43344,46240,47780,44368,21977,19360,42416,86390,21168,43312, ...         31060,27296,44368,23378,19296,42726,42208,53856,60005,54576, ...         23200,30371,38608,19415,19152,42192,118966,53840,54560,56645, ...         46496,22224,21938,18864,42359,42160,43600,111189,27936,44448]; lYearDays=[384,354,355,383,354,355,384,354,355,384, ...         354,384,354,354,384,354,355,384,355,384, ...         354,354,384,354,354,385,354,355,384,354, ...         383,354,355,384,355,354,384,354,384,354, ...         354,384,355,354,385,354,354,384,354,384, ...         354,355,384,354,355,384,354,383,355,354, ...         384,355,354,384,355,353,384,355,384,354, ...         355,384,354,354,384,354,384,354,355,384, ...         355,354,384,354,384,354,354,384,355,355, ...         384,354,354,383,355,384,354,355,384,354, ...         354,384,354,355,384,354,385,354,354,384, ...         354,354,384,355,384,354,355,384,354,354, ...         384,354,355,384,354,384,354,354,384,355, ...         354,384,355,384,354,354,384,354,354,384, ...         355,355,384,354,384,354,354,384,354,355]; leapDays=[29,0,0,29,0,0,30,0,0,29, ...         0,29,0,0,30,0,0,29,0,30, ...         0,0,29,0,0,30,0,0,29,0, ...         29,0,0,29,0,0,30,0,30,0, ...         0,30,0,0,30,0,0,29,0,29, ...         0,0,30,0,0,30,0,29,0,0, ...         29,0,0,29,0,0,29,0,29,0, ...         0,29,0,0,29,0,29,0,0,30, ...         0,0,29,0,29,0,0,29,0,0, ...         29,0,0,29,0,29,0,0,29,0, ...         0,29,0,0,29,0,29,0,0,29, ...         0,0,29,0,29,0,0,30,0,0, ...         29,0,0,29,0,29,0,0,29,0, ...         0,29,0,29,0,0,30,0,0,29, ...         0,0,29,0,29,0,0,30,0,0]; leapMonth=[8,0,0,5,0,0,4,0,0,2, ...         0,6,0,0,5,0,0,2,0,7, ...         0,0,5,0,0,4,0,0,2,0, ...         6,0,0,5,0,0,3,0,7,0, ...         0,6,0,0,4,0,0,2,0,7, ...         0,0,5,0,0,3,0,8,0,0, ...         6,0,0,4,0,0,3,0,7,0, ...         0,5,0,0,4,0,8,0,0,6, ...         0,0,4,0,10,0,0,6,0,0, ...         5,0,0,3,0,8,0,0,5,0, ...         0,4,0,0,2,0,7,0,0,5, ...         0,0,4,0,9,0,0,6,0,0, ...         4,0,0,2,0,6,0,0,5,0, ...         0,3,0,7,0,0,6,0,0,5, ...         0,0,2,0,7,0,0,5,0,0];        offset=datenum(y,m,d)-datenum(1900,1,31)+1; dayCyl = offset + 40; monCyl = 14; cumLYearDays=cumsum([0,lYearDays]); LunarYear=find(offset>cumLYearDays); LunarYear=LunarYear(end); monCyl=monCyl+(LunarYear-1)*12;yearCyl = LunarYear+36; offset=offset-cumLYearDays(LunarYear); monthDays=[29,30]; monthDays=monthDays((bitand(lunarInfo(LunarYear),bitshift (65536,-(1:12)))~=0)+1); leap = leapMonth(LunarYear); if leap,     monthDays=[monthDays(1:leap),leapDays(LunarYear),monthDays(leap+1:end)]; end cumMonthDays=cumsum([0,monthDays]); LunarMonth=find(offset>cumMonthDays);LunarMonth=LunarMonth(end); offset=offset-cumMonthDays(LunarMonth); ch_run_ch=''; if leap      if  LunarMonth==(leap+1),ch_run_ch='闰'; end     if (LunarMonth>leap),LunarMonth=LunarMonth-1;end end monCyl=monCyl+LunarMonth; xx=['农历',Animals{rem(yearCyl-1,12)+1},'年',ch_run_ch,CnMonthStr{LunarMonth},'月',CnDayStr{offset}]; xx={xx;[cyclical(yearCyl),'年  ',cyclical(monCyl),'月  ',cyclical(dayCyl),'日']}; return function ganzhi=cyclical(num) Gan={'甲','乙','丙','丁','戊','己','庚','辛','壬','癸'}; Zhi={'子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥'}; ganzhi=[Gan{rem(num-1,10)+1},Zhi{rem(num-1,12)+1}]; 【 在 abcxyz2008 (木头) 的大作中提到: 】 : 各位,哪里有阴历与阳历的对照,我已知某一天的阳历日期,想知道阴历是多少,怎么 : 办?哪里有万年历? -- ※ 来源:·BBS 水木清华站 smth.org·[FROM: 211.68.38.167] 顺便把我自己的生日介绍一下,呵呵 >> LunarCalendar(1981,3,23)

ans =

    '农历鸡年二月十八'     '辛酉年  辛卯月  庚子日'

 

 

<script type="text/JavaScript"> alimama_pid="mm_10100948_184213_219218"; alimama_titlecolor="0000FF"; alimama_descolor ="000000"; alimama_bgcolor="FFFFFF"; alimama_bordercolor="E6E6E6"; alimama_linkcolor="008000"; alimama_bottomcolor="FFFFFF"; alimama_anglesize="0"; alimama_bgpic="0"; alimama_icon="0"; alimama_sizecode="31"; alimama_width=180; alimama_height=250; alimama_type=2; </script> <script src="http://a.alimama.cn/inf.js" type=text/javascript> </script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 249
    评论
以下是 Python 实现的农历阳历代码: ```python import math # 农历1900年到2049年每年的天数及每月的天数 lunar_month_days = [ 0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 ] # 农历1900年的阳历日期 solar_1900 = (1900, 1, 31) def is_leap(year): """判断是否为闰年""" return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) def lunar_to_solar(lunar_year, lunar_month, lunar_day): """农历阳历""" # 计算农历日期与1900年1月31日相差的天数 days_diff = 0 for i in range(lunar_year - 1900): days_diff += 365 + int(is_leap(1900 + i)) for i in range(lunar_month - 1): days_diff += (lunar_month_days[lunar_year - 1900] >> i) & 1 days_diff += lunar_day - 1 # 计算阳历日期 solar_days = solar_1900[2] + days_diff solar_month = solar_1900[1] solar_year = solar_1900[0] while True: days_in_month = 28 + is_leap(solar_year) if solar_month == 2 else 31 - ((solar_month - 1) % 7 % 2) if solar_days > days_in_month: solar_days -= days_in_month solar_month += 1 if solar_month > 12: solar_month = 1 solar_year += 1 else: break return solar_year, solar_month, solar_days ``` 使用方法: ```python lunar_year = 2022 lunar_month = 1 lunar_day = 1 solar_year, solar_month, solar_day = lunar_to_solar(lunar_year, lunar_month, lunar_day) print(f"农历{lunar_year}年{lunar_month}月{lunar_day}日对应的阳历日期为:{solar_year}年{solar_month}月{solar_day}日") ``` 输出结果: ``` 农历2022年1月1日对应的阳历日期为:2022年1月31日 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 249
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值