以文本方式查看主题

-  中华农历论坛  (http://bbs.nongli.net/index.asp)
--  历法知识  (http://bbs.nongli.net/list.asp?boardid=2)
----  [求助]向各位老师求助一个年内积日的算法.  (http://bbs.nongli.net/dispbbs.asp?boardid=2&id=54066)

--  作者:时空转换
--  发布时间:2012/2/27 18:07:00
--  [求助]向各位老师求助一个年内积日的算法.
因为要做一些有关的统计工作,所以要用到一个年内第几天的算法,
可我对历方法的东东不熟悉,向老师们求一个一年内是第几天的年
积日算法,最好是四则运算的,用公历时间推算出是年内的第几天.
太复杂的俺搞不明白.谢谢
--  作者:浪-淘-沙
--  发布时间:2012/2/28 18:32:00
--  

既然太复杂的,你不喜欢用。那么就直接使用软件啊。

比如“EXCEL”(微软的一个软件,你应当使用过吧),你就可以直接计算二天之间的日数。

假如你把上年的12月31日定为0,则当年的任一天的“积日”就很快算出来的。二个日期直接相减,就得到二个日期之间的天数。

 

你也可以使用《寿星天文历》,利用“儒略日”来计算。每天都有对应的唯一的“儒略日”。二个儒略日数相减,就得到二个日期之间的日数。


--  作者:浪-淘-沙
--  发布时间:2012/2/28 18:55:00
--  

如果上述方法,你也不喜欢用。

那么就直接用“硬”办法了。

 

反正每个月的天数,你都是知道的。直接累加起来就是了。

 

比如今年5月8日的“积日”:

由于2月为闰,有29天,

则计算公式:

31+29+31+30+8=129。

即5月8日是今年的第129天。(1月1日为第1天)。


--  作者:时空转换
--  发布时间:2012/2/29 10:31:00
--  
感谢你,浪淘沙,恕我拙笨,这个我不理解:假如你把上年的12月31日定为0,则当年的任一天的“积日”就很快算出来的。二个日期直接相减,就得到二个日期之间的天数。能讲明白一些吗?硬方法不适和我用,谢谢
比如10月10日,到1月1日,相减?    我感觉你的理解和我的不一样,我是要用任意的阳历日期,算出他是一年的第多少天.就是已知阳历日期,算出他到上年12月31日的积日.而不是已知两个日期的积日,算出他们之间,有多少天.
--  作者:浪-淘-沙
--  发布时间:2012/2/29 13:17:00
--  
以下是引用时空转换在2012-2-29 10:31:00的发言:
感谢你,浪淘沙,恕我拙笨,这个我不理解:假如你把上年的12月31日定为0,则当年的任一天的“积日”就很快算出来的。二个日期直接相减,就得到二个日期之间的天数。能讲明白一些吗?硬方法不适和我用,谢谢
比如10月10日,到1月1日,相减? 我感觉你的理解和我的不一样,我是要用任意的阳历日期,算出他是一年的第多少天.就是已知阳历日期,算出他到上年12月31日的积日.而不是已知两个日期的积日,算出他们之间,有多少天.

你以上年的12月31日为基准,算出本年的3月8日到上年的12月31日之间的天数,就是3月8日在本年内的积日啊。

原理很简单啊:

1月1日 减去 12月31日,等于1,即积日数为1

1月31日减去12月31日,等于31,即积日数为31,

同理,

3月8日减去12月31日,等于:31+29+8=68,即积日数为68。

 

如果不愿意手算,就直接用“EXCEL”制表软件(微软的,你不会说没用过吧),二个日期一相减,就直接出答案了。(EXCEL有日期计算功能,不必再一天天地累加了。)


--  作者:客人
--  发布时间:2012/3/1 10:20:00
--  
虽然没用,但是还是感谢你的耐心回答。这个并不是简单的用于EXCEL,可能是我没能说清楚,用你上面的例子来讲,1月31日、12月31日,分别视为131和1231。每一天都这么处理。目的是用于程序统一计算。也可以说是用来编写程序的,而这个想法也不同于网上现成的一程式代码,分别辩别大小月份,再做累加处理。所以你说的方法,不适用。一年中的任何一天,都以1月1日即101或是上年的1231来基准来算。 而不是算年中的两个日期之间的积日,也就是说这个算法,要适用于每一天的数字,比如。10月16。(1016)11月16(1116)等等日期。
) 
--  作者:浪-淘-沙
--  发布时间:2012/3/1 11:35:00
--  
以下是引用客人(180.168.*.*)在2012-3-1 10:20:00的发言:
虽然没用,但是还是感谢你的耐心回答。这个并不是简单的用于EXCEL,可能是我没能说清楚,用你上面的例子来讲,1月31日、12月31日,分别视为131和1231。每一天都这么处理。目的是用于程序统一计算。也可以说是用来编写程序的,而这个想法也不同于网上现成的一程式代码,分别辩别大小月份,再做累加处理。所以你说的方法,不适用。一年中的任何一天,都以1月1日即101或是上年的1231来基准来算。 而不是算年中的两个日期之间的积日,也就是说这个算法,要适用于每一天的数字,比如。10月16。(1016)11月16(1116)等等日期。

那就算了吧。

因为你并不了解“程序”是如何编写的。

 

EXCEL里面,2011年12月31日,并不是写作“20111231”而是用程序直接转化为“40908”

同里,2012年3月8日,也不是“201238”,而是“40976”,

这二个数一相减,结果就是你要的“积日”了。

 

至于2011-12-31是如何化作40908的,这个请你去咨询微软的工程师。

 

在《寿星天文历》软件里,2011-12-31,可以化作“JD 2455927或 4382”

同理,2012-3-8,化为“JD 2455995或 4450”

二数相减,得到同样的结果。

 

那么2011-12-31如何变成2455927呢?这是一个“儒略日算法”,你可以搜索一下它的算法是如何实现的。(《寿星天文历》软件的“帮助”文档中,也是详细介绍。)

 

如果上面二段描述,你还是无法理解。就当我白说了。


--  作者:xjw01
--  发布时间:2012/3/14 23:21:00
--  

年内积日,天文学家采用速算公式。《天文算法》中有讲到。公式好象是上世纪初发明的。

有了计算机,也不一定使用那个公式了,统一使用儒略日计算日期之间的差值更方便。

儒略日的计算,也有现成的公式。详见《寿星天文历的》“帮助”