2010-04-06 5 views
3

выход должен обрабатывать первую дату как «день», а второй - «ночь». Я играю с этим в течение нескольких часов и не могу понять, что я делаю неправильно. Есть идеи?Расчет Python Ephem/Datetime

Редактировать Я предполагаю, что проблема связана с моей даты осуществления сравнения

Выход:

$ 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

+0

@miara Я исправил это ... – dassouki

ответ

7

o.date будет способы быть между o.previous_settings и o.next_rising;), так что вы можете проверить это следующим образом:

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