2010-04-06 103 views
3

輸出結果應該將第一個日期處理爲「日」,將第二日處理爲「夜」。我已經玩了幾個小時了,無法弄清楚我做錯了什麼。有任何想法嗎?Python Ephem /日期時間計算

編輯 我認爲這個問題是由於我的日期比較實施

輸出:

$ python time_of_day.py 
* should be day: 
event date: 2010/4/6 16:00:59 
prev rising: 2010/4/6 09:24:24 
prev setting: 2010/4/5 23:33:03 
next rise: 2010/4/7 09:22:27 
next set: 2010/4/6 23:34:27 
day 
* should be night: 
event date: 2010/4/6 00:01:00 
prev rising: 2010/4/5 09:26:22 
prev setting: 2010/4/5 23:33:03 
next rise: 2010/4/6 09:24:24 
next set: 2010/4/6 23:34:27 
day 

time_of_day.py

import datetime 
import ephem # install from http://pypi.python.org/pypi/pyephem/ 

#event_time is just a date time corresponding to an sql timestamp 
def type_of_light(latitude, longitude, event_time, utc_time, horizon): 

    o = ephem.Observer() 
    o.lat, o.long, o.date, o.horizon = latitude, longitude, event_time, horizon 

    print "event date ", o.date 

    print "prev rising: ", o.previous_rising(ephem.Sun()) 
    print "prev setting: ", o.previous_setting(ephem.Sun()) 
    print "next rise: ", o.next_rising(ephem.Sun()) 
    print "next set: ", o.next_setting(ephem.Sun()) 


    if o.previous_rising(ephem.Sun()) <= o.date <= o.next_setting(ephem.Sun()): 
    return "day" 
    elif o.previous_setting(ephem.Sun()) <= o.date <= o.next_rising(ephem.Sun()): 
    return "night" 
    else: 
    return "error" 


print "should be day: ", type_of_light('45.959','-66.6405','2010/4/6 16:01','-4', '-6') 

print "should be night: ", type_of_light('45.959','-66.6405','2010/4/6 00:01','-4', '-6') 
+2

你不傳遞相同的值到兩個「應天」和「應該是之夜」? – miara 2010-04-06 19:28:07

+0

@miara我修正了...... – dassouki 2010-04-06 19:31:00

回答

7

o.date將al方法是o.previous_settings和o.next_rising之間),這樣你就可以檢查一下這種方式:

if o.previous_rising(ephem.Sun()) > o.previous_setting(ephem.Sun()): 
    return "day" 
elif: 
    return "night"