2010-04-06 6 views
3

La sortie doit traiter la première date comme "jour" et la seconde comme "nuit". Je joue avec ça depuis quelques heures maintenant et je n'arrive pas à comprendre ce que je fais de mal. Des idées?Calcul Python Ephem/Datetime

Modifier Je suppose que le problème est dû à ma date de mise en œuvre comparaison

Sortie:

$ 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

N'êtes-vous pas passer les mêmes valeurs à la fois « devrait être jour » et « devrait être la nuit »? – miara

+0

@miara J'ai réparé ça ... – dassouki

Répondre

7

o.date sera al être des moyens entre o.previous_settings et o.next_rising;), afin que vous puissiez vérifier la façon suivante:

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