2017-07-06 57 views
1

我需要將UT中結合了經度的時間轉換爲本地時間。我正在分析未來的地球觀測衛星任務,並需要做這種轉換才能繼續。如何使用UT中的datetime.time對象並將其轉換爲給定經度的本地時間

我發現這個問題的一個通用解決方案here:T(lt)= T(ut)+ lon /(360/24),然而實現它卻讓我絕對瘋狂。

我的數據是日期時間時對象:

In[9]: sattime[0] 
Out[9]: datetime.time(18, 0) 

和經度從0到360度座標。

我需要把這個對象,並使用上述公式轉換爲本地時間。我只關心相對於午夜的時間而不關心日期(實際上我的其他代碼當前只使用datetime.time對象,最好是本地時間輸出將是相同類型的對象)。

我試過以下從here,但我堅持讓本地變量回到時間對象。

test = 4  
for (i,j) in zip(sattime, satloncor): 
    td = datetime.datetime.combine(datetime.datetime.min, i) - datetime.datetime.min 
    seconds = td // datetime.timedelta(milliseconds=1) 
    local = (seconds + (j/(360/86400)))/1000 
    print (local) 
    if test<0: 
     break 
    test-=1 

代碼的測試部分只是確保我沒有浪費時間做轉換所有〜40萬個數據點。所以總結一下,我想把UT中的datetime.time對象與相應的經度相結合,並將它轉換爲當地太陽時間作爲datetime.time對象。

這一切似乎超級複雜,似乎應該有一個更簡單的方法。任何幫助是極大的讚賞!謝謝!

回答

1

我想通了,但它不漂亮。

localtimes = [] 
for (i,j) in zip(sattime, satloncor): 
    td = dt.datetime.combine(dt.datetime.min, i) - dt.datetime.min 
    seconds = td // dt.timedelta(seconds=1) 
    local = (seconds + (j/(360/86400)))/3600 
    if local>24: 
     local-=24 
    strip = [math.modf(local)[1],math.modf(local)[0]*60 ] 
    if strip[0]==24: 
     localtimes.append(dt.time(0, int(strip[1]),0)) 
    else: 
     localtimes.append(dt.time(int(strip[0]), int(strip[1]),0)) 
-1

對不起,但它超級複雜,因爲它是一個複雜的主題。僅舉一個例子,你知道每隔幾年有86401秒的一天嗎?

一對夫婦的好網站入手:

http://www.ephemeris.com/books.html

我可以推薦了「實踐與天文學計算器」的書。

https://www.timeanddate.com/

希望這有助於。

相關問題