儒略日轉公曆 以及 公曆轉儒略日(python版)

2021-10-04 02:53:04 字數 2304 閱讀 4358

作為乙個測繪專業小碼農,經常需要儒略日,年積日,gps週秒等的時間轉換。

寫了個小函式方便每次的轉換時間,利用的是列表形式

mjd2cal() 函式是簡化儒略日計算公曆年月日時分秒,輸入簡化儒略日(含小數),返回年月日時分秒的一維列表。

cal2mjd() 函式將公曆年月日時分秒轉換到簡化儒略日,輸入年月日時分秒的一維列表返回簡化儒略日值。

def cal2mjd(cal):

# cal2jd 將公曆年月日時分秒轉換到簡化儒略日。

# 輸入公曆時間列表,返回儒略日

if(len(cal)<6):

for i in range(len(cal),6):

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)

# 教皇格雷戈里十三世於2023年2月24日以教皇訓令頒布,將2023年10月5日至14抹掉。2023年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

def mjd2cal(mjd):

# 從簡化儒略日計算公曆年月日時分秒

# 返回的cal是年月日時分秒 列表

# 公元2023年10月4日24:00點之前使用儒略曆,公元2023年10月15日00: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

return [year, month, day, hour, minute, sec]

這裡轉化的是簡化儒略日,需要儒略日不需要減去2400000.5即可

**裡注釋寫的也比較清楚,計算公式網上也可以查到。這裡就不重複了

儒略日 儒略曆

儒略曆 julian calendar 儒略日 julian day 與儒略年這三個詞字面上我並不陌生,但對於具體內涵卻不知就裡。最近無意檢索發現 因研究生態水文模型iha,裡面採用了儒略日計算 原來此儒略非彼儒略,一為威風八面的君主,另一為子報父恩的學者。儒略曆是格里曆的前身,由羅馬共和國 官儒略...

c Julian day 儒略日計算公式

天文學有一種連續紀日的儒略日 jd 它以儒略曆西元前4713年1月1日的gmt正午為第0日的開始。還有一種簡化儒略日 mjd mjd jd 2400000.5 mjd的第0日是從公曆1858年11月17日的gmt零時開始的。需要注意 儒略曆西元前4713年1月1日相當於公曆西元前4713年11月24...

Time Python 年月日與儒略日的轉換

from datetime import datetime def d to jd time fmt y.m.d dt datetime.strptime time,fmt tt dt.timetuple return tt.tm year 1000 tt.tm yday def jd to tim...