2010-04-06 96 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"