鉴于纬度和经度,我怎么知道它是否是白昼?

时间:2011-09-12 08:53:12

标签: python time astronomy

我正在编写一个Python程序,只需要当前的UTC时间和目标纬度和经度,就需要确定它是否是日出后的。我看到应用程序一直在做这种事情,但我不知道它是如何完成的。有什么想法吗?

4 个答案:

答案 0 :(得分:4)

以下是某人在Python中实现日出/日落计算:http://michelanders.blogspot.com/2010/12/calulating-sunrise-and-sunset-in-python.html

答案 1 :(得分:1)

只是快速进行谷歌搜索我发现this. NOAA日出/日落和太阳位置计算器中的计算基于Jean Meeus的天文算法方程式。对于纬度为+/- 72°的位置,以及在这些纬度以外10分钟内的位置,日出和日落结果已经过验证,精确到一分钟内。

有关计算详情的详细说明,请参阅该页面以及here.

答案 2 :(得分:1)

算法的完整布局为here

真的不是很多。引用的文档中的10个点分解为简单的重现步骤,可以用任何语言实现。

答案 3 :(得分:0)

你需要正常工作的东西™?使用优越的语言。而且你知道它永远都会奏效。你怎么能相信122系列先进的天体物理学?你不能。但你总能相信PHP。

>>> def is_day(lat, lon): # optinally adjust zenith (currently 96) at the end of the line
...   return subprocess.check_output(["php","-r","""date_default_timezone_set("GMT");\n$a=date_sunrise(time(),SUNFUNCS_RET_DOUBLE,{0},{1},{2},0);\n$b=date_sunset(time(),SUNFUNCS_RET_DOUBLE,{0},{1},{2},0);\n$t=date("H")+date("i")/60+date("s")/3600;\necho($a<$b?($t>$a&&$t<$b):($t>$a||$t<$b))?"day":"night";""".format(lat,lon,96)])=="day"
...   #                                                                                                                                                                                                                                                                                                                             ^^ optionally adjust zenith here
... 
>>> is_day(-33,151) # Sydney
True
>>> is_day(0,0) # Some hundred km off the coast of Africa
False
>>> __import__("datetime").datetime.utcnow()
datetime.datetime(2012, 2, 10, 22, 29, 30, 365019)
>>>