Расчет Python Ephem / Datetime - PullRequest
       6

Расчет Python Ephem / Datetime

3 голосов
/ 06 апреля 2010

вывод должен обрабатывать первую дату как «день», а вторая как «ночь».Я играю с этим уже несколько часов и не могу понять, что я делаю не так.Есть идеи?

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

Вывод:

$ 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')

1 Ответ

7 голосов
/ 06 апреля 2010

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

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