以文本方式查看主题 - 中华农历论坛 (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 -- 年内积日,天文学家采用速算公式。《天文算法》中有讲到。公式好象是上世纪初发明的。 有了计算机,也不一定使用那个公式了,统一使用儒略日计算日期之间的差值更方便。 儒略日的计算,也有现成的公式。详见《寿星天文历的》“帮助” |