中华农历论坛知识讨论区历法知识 → [求助]向各位老师求助一个年内积日的算法.


  共有15708人关注过本帖树形打印

主题:[求助]向各位老师求助一个年内积日的算法.

帅哥哟,离线,有人找我吗?
时空转换
  1楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:2 积分:223 威望:0 精华:0 注册:2012/2/27 17:50:00
[求助]向各位老师求助一个年内积日的算法.  发帖心情 Post By:2012/2/27 18:07:00

因为要做一些有关的统计工作,所以要用到一个年内第几天的算法,
可我对历方法的东东不熟悉,向老师们求一个一年内是第几天的年
积日算法,最好是四则运算的,用公历时间推算出是年内的第几天.
太复杂的俺搞不明白.谢谢

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
浪-淘-沙
  2楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:2068 积分:4263 威望:5 精华:4 注册:2008/11/13 21:03:00
  发帖心情 Post By:2012/2/28 18:32:00

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

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

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

 

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


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
浪-淘-沙
  3楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:2068 积分:4263 威望:5 精华:4 注册:2008/11/13 21:03:00
  发帖心情 Post By:2012/2/28 18:55:00

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

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

 

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

 

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

由于2月为闰,有29天,

则计算公式:

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

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


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
时空转换
  4楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:2 积分:223 威望:0 精华:0 注册:2012/2/27 17:50:00
  发帖心情 Post By:2012/2/29 10:31:00

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

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
浪-淘-沙
  5楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:2068 积分:4263 威望:5 精华:4 注册:2008/11/13 21:03:00
  发帖心情 Post By: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有日期计算功能,不必再一天天地累加了。)


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
客人(180.168.*.*)
  6楼


  发帖心情 Post By:2012/3/1 10:20:00

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

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
浪-淘-沙
  7楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:2068 积分:4263 威望:5 精华:4 注册:2008/11/13 21:03:00
  发帖心情 Post By: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呢?这是一个“儒略日算法”,你可以搜索一下它的算法是如何实现的。(《寿星天文历》软件的“帮助”文档中,也是详细介绍。)

 

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


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
xjw01
  8楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蝙蝠侠 帖子:866 积分:3804 威望:3 精华:20 注册:2008/3/20 22:14:00
  发帖心情 Post By:2012/3/14 23:21:00

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

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

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


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部

返回版面帖子列表

[求助]向各位老师求助一个年内积日的算法.








签名