Python Ephem /日期时间计算

问题描述 投票:3回答:1

输出应将第一个日期处理为“日”,将第二个日期处理为“夜”。我已经玩了几个小时了,无法弄清楚我在做什么错。有什么想法吗?

编辑我认为问题是由于我的日期比较实现

输出:

$ 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')
python datetime astronomy pyephem
1个回答
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"
© www.soinside.com 2019 - 2024. All rights reserved.