时间转int_用ephem库计算24节气时间

今天是小寒节气,是2020年的第一个节气。微信上关注的人民日报公众号,每个节气都会发布一些和节气相关的时间、气候、传统习俗等,这个时间具体怎么计算的呢,其实很简单。

24节气歌:

春雨惊春清谷天,夏满芒夏暑相连。

秋处露秋寒霜降,冬雪雪冬小大寒。

24节气是依照太阳在黄道上的位置来确定的,太阳在黄道上自西向东转,一个回归年转一圈。春分时的太阳黄经为0°,每走15°就是一个节气,也就是黄经为15°时的节气为清明,30°时的节气为谷雨,以此类推,345°时为惊蛰。今天小寒节气,也就是太阳走到了黄经285°。

ephem库可以提供太阳的位置,给定一个时间,可获得太阳的黄道坐标。但是有一点要注意的是,ephem库里面提供的Equatorial函数(求赤道坐标)或者Ecliptic函数(求黄道坐标)默认的epoch(历元)参数是J2000,也就是相对于UTC 2000/1/1 12:00:00时的坐标。由于岁差章动等影响,春分点在黄道上的位置在逐渐西移,而我们上面所说的24节气依照的是太阳的视黄经,因此要把epoch参数设置为所求时间,这样所求的太阳黄经才是视黄经。

具体代码如下:

from ephem import *
import math
import datetime
#24节气
jieqi=["春分","清明","谷雨","立夏","小满","芒种",
       "夏至","小暑","大暑","立秋","处暑","白露",
       "秋分","寒露","霜降","立冬","小雪","大雪",
       "冬至","小寒","大寒","立春","雨水","惊蛰"]
#计算黄经
def ecliptic_lon(jd_utc):
    s=Sun(jd_utc)#构造太阳
    equ=Equatorial(s.ra,s.dec,epoch=jd_utc)#求太阳的视赤经视赤纬(epoch设为所求时间就是视赤经视赤纬)
    e=Ecliptic(equ)#赤经赤纬转到黄经黄纬
    return e.lon#返回黄纬
#根据时间求太阳黄经,计算到了第几个节气,春分序号为0
def sta(jd):
    e=ecliptic_lon(jd)
    n=int(e*180.0/math.pi/15)
    return n
#根据当前时间,求下个节气的发生时间
def iteration(jd,sta):#jd:要求的开始时间,sta:不同的状态函数
    s1=sta(jd)#初始状态(太阳处于什么位置)
    s0=s1
    dt=1.0#初始时间改变量设为1天
    while True:
        jd+=dt
        s=sta(jd)
        if s0!=s:
            s0=s
            dt=-dt/2#使时间改变量折半减小
        if abs(dt)<0.0000001 and s!=s1:
            break
    return jd
def jq(num):#从当前时间开始连续输出未来n个节气的时间
    jd=now()#获取当前时间的一个儒略日和1899/12/31 12:00:00儒略日的差值
    e=ecliptic_lon(jd)
    n=int(e*180.0/math.pi/15)+1
    for i in range(num):
        if n>=24:
            n-=24
        jd=iteration(jd,sta)
        d=Date(jd+1/3).tuple()
        print("{0}-{1:02d}-{2:02d} {3}:{4:02d}:{5:02d}:{6:03.1f}".format(d[0], d[1], d[2],jieqi[n],d[3], d[4], d[5]))
        n+=1
jq(36)

结果如下:

2020-10-23 霜降:06:59:26.0
2020-11-07 立冬:07:13:48.5
2020-11-22 小雪:04:39:36.0
2020-12-07 大雪:00:09:20.6
2020-12-21 冬至:18:02:9.0
2021-01-05 小寒:11:23:14.1
2021-01-20 大寒:04:39:39.9
2021-02-03 立春:22:58:36.7
2021-02-18 雨水:18:43:48.7
2021-03-05 惊蛰:16:53:33.2
2021-03-20 春分:17:37:22.4
2021-04-04 清明:21:35:3.0
2021-04-20 谷雨:04:33:21.9
2021-05-05 立夏:14:47:11.9
2021-05-21 小满:03:37:9.3
2021-06-05 芒种:18:52:9.7
2021-06-21 夏至:11:32:14.9
2021-07-07 小暑:05:05:32.6
2021-07-22 大暑:22:26:30.8
2021-08-07 立秋:14:54:1.5
2021-08-23 处暑:05:35:1.0
2021-09-07 白露:17:52:55.9
2021-09-23 秋分:03:21:3.0
2021-10-08 寒露:09:38:57.6
2021-10-23 霜降:12:51:2.5
2021-11-07 立冬:12:58:36.3
2021-11-22 小雪:10:33:31.5
2021-12-07 大雪:05:56:51.7
2021-12-21 冬至:23:59:5.4
2022-01-05 小寒:17:13:50.2
2022-01-20 大寒:10:38:52.8
2022-02-04 立春:04:50:34.8
2022-02-19 雨水:00:42:51.1
2022-03-05 惊蛰:22:43:37.3
2022-03-20 春分:23:33:18.3
2022-04-05 清明:03:20:9.6

和紫金山天文台公布的24节气时间误差基本上在10s以内,可能和ephem库的精度还不足够高有关吧。除非遇到的所求节气时间在一天的最后或者最前的几秒,否则上面的代码求得的24节气的日期一般情况下应该会和官方相同。

参考:利用PyEphem库进行任意日期的公历转换农历

2020年二十四节气精确时间 - 有趣天文奇观

2021年二十四节气精确时间 - 有趣天文奇观

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值