Python Ephem / Datetime calculation
Posted
by dassouki
on Stack Overflow
See other posts from Stack Overflow
or by dassouki
Published on 2010-04-06T19:23:36Z
Indexed on
2010/04/06
19:53 UTC
Read the original article
Hit count: 287
the output should process the first date as "day" and second as "night". I've been playing with this for a few hours now and can't figure out what I'm doing wrong. Any ideas?
Edit I assume that the problem is due to my date comparison implementation
Output:
$ 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')
© Stack Overflow or respective owner