资讯详情

公历与儒略日的相互转化

做作业时需要转换数据,做两个儒略日和公历相互转换的函数,作为日常记录,互相鼓励! 儒略日转换为函数的主要功能,儒略日的起点定在公元前4713年(天文学记录为 -4712年1月1日格林威治时间平午(世界时间12:00)JD 0指定为UT时间B.C.4713年1月1日12:00到UT时间B.C.4713年1月2日12时24小时。每天给出一个唯一的数字,顺数而下,比如1996年1月1日12:00:00的儒略日是2450084。这个日期是考虑到太阳和月亮的轨道运行周期,以及当时的税收间隔。

说明: 1973年,国际天文多,国际天文联合会于1973年简化了儒略日(MJD),其定义为 MJD = JD - 2400000.5。MJD1858年11月17日世界时间0:00开始。 例如,1979年10月1日零时儒略日数为2、444、147.5.每月0日世界时间12时,天文年历附表包含儒略日数。

def mjd2cal(mjd):     # 简化儒略日计算公历的日期     # 返回的cal保存三位小数的年份时间表和 年月日时分秒 列表     # 1582年10月4日24:00前使用儒略历,1582年10月15日0:00后使用儒略历     J = mjd   2400000.5     if (J < 1721423.5):         # 公元1月1日0时         BC = 1;     else:         BC = 0;      if (J < 2299160.5):         # 1582.10.4. 24:00 前         j0 = math.floor(J   0.5)         dd = J   0.5 - j0     else:         # 不是闰年的年数         n1 = math.floor((J - 2342031.5) / 36524.25 / 4)   1  # 1700.3.1.0         n2 = math.floor((J - 2378555.5) / 36524.25 / 4)   1  # 1800.3.1.0         n3 = math.floor((J - 2415079.5) / 36524.25 / 4)   1  # 1900.3.1.0         j0 = n1   n2   n3   J   10
        dd = j0 + 0.5 - math.floor(j0 + 0.5)
        j0 = math.floor(j0 + 0.5)

    j0 = j0 + 32083
    year0 = math.ceil(j0 / 365.25) - 1
    year = year0 - 4800
    day = j0 - math.floor(year0 * 365.25)
    month = math.floor((day - 0.6) / 30.6) + 3
    day = day - round((month - 3) * 30.6)

    if (month > 12):
        month = month - 12
        year = year + 1
    year = year - BC
    sec = round(dd * 86400)
    hour = math.floor(sec / 3600)
    sec = sec - hour * 3600
    minute = math.floor(sec / 60)
    sec = sec - minute * 60
    ## 判断是不是闰年,计算精确到小数点后三位的
    day0 = [0,31,59,90,120,151,181,212,243,273,304,334]
    if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
        yy = round(year + (day0[month-1]+1+day+hour/24+minute/1440)/366, 3)
    else:
        yy = round(year + (day0[month-1]+day+hour/24+minute/1440)/365, 3)
    return [yy, year, month, day, hour, minute, sec]

In: mjd2cal(53930) Out: [2006.619, 2006, 7, 14, 0, 0, 0]

def cal2mjd(cal):
# cal2jd 将公历年月日时分秒转换到简化儒略日。
# 输入公历时间列表,返回儒略日
    if(len(cal)<6):
        for i in range(len(cal),6):
            cal.append(0)
    year  = cal[0]
    month = cal[1]
    day   = cal[2]+(cal[3]*3600+cal[4]*60+cal[5])/86400;
    y     = year+4800  
    m     = month
    if( year < 0 ):
        print('Year is wrong')
        return False
    
    if( m <= 2):
        # 1,2月视为前一年13,14月
        m = m + 12
        y = y - 1
    e = math.floor(30.6 * (m+1))
    a = math.floor(y/100)
    # 教皇格雷戈里十三世于1582年2月24日以教皇训令颁布,将1582年10月5日至14抹掉。1582年10月4日过完后第二天是10月15日
    if( year <1582 )or(year==1582 and month<10)or(year==1582 and month==10 and day<15):
        b = -38
    else:
        b = math.floor((a/4) - a)
    c = math.floor(365.25 * y)
    jd = b + c + e + day - 32167.5
    mjd = jd - 2400000.5
    return mjd

In: [2006,7,14,0,0,0] Out: 53930

标签: 贴片晶体管mjd112gmjd41ct4g三极管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台