【发布时间】:2014-09-19 13:25:57
【问题描述】:
显然有一个时间模块可以解决这个问题,但我还没有找到它。 我只是想在 Raspberry Pi 上使用 Pyephem 来找出我的纬度经度坐标的日出和日落时间。 代码很简单:
import ephem
import datetime
import time
now = datetime.datetime.now()
gmNow = time.mktime(time.localtime())
Vancouver = ephem.Observer()
Vancouver.lat = 49.2878
Vancouver.horizon = 0
Vancouver.lon = -123.0502
Vancouver.elevation = 80
Vancouver.date = now
# Vancouver.date = time.localtime()
sun = ephem.Sun()
print("sunrise is at",ephem.localtime(Vancouver.next_rising(sun)))
print("sunset is going to be at ",ephem.localtime(Vancouver.next_setting(sun)))
print("now is ",now)
print("gmNow is",gmNow)
什么导出,但运行时错误是 8 小时。所以看起来 ephem.localtime() 实际上并没有运行。
pi@raspberrypi ~ $ sudo python3 vivarium_sun.py
sunrise is at 2014-09-19 12:55:56.000004
sunset is going to be at 2014-09-19 00:52:30.000004
now is 2014-09-19 06:22:24.014859
gmNow is 1411132944.0
这让我发疯了,而且一旦弄清楚它显然就是那些简单的事情之一,所以我要在这里讨论蜂巢思维。
编辑** 只需在 Raspberry Pi 的命令行中输入“日期”即可返回以下内容:
pi@raspberrypi ~ $ date
Fri Sep 19 18:41:42 PDT 2014
这是准确的。
【问题讨论】:
-
您应该使用
time.time()而不是time.mktime(time.localtime()),后者可能会在夏令时转换期间返回错误结果。 -
Python 依赖于您的操作系统设置来确定本地时间的含义。因此,我们应该首先将 Python 排除在外:如果您在 Raspberry Pi 上键入命令
date,它的输出是什么 - 您可以将其粘贴到我们的问题中吗? -
是的,您可以从底部第二条的“现在是..”评论中看到 datetime.datetime.now() 正在返回准确的本地时间。此外,命令行中的日期或时间命令返回精确到本地时间。
-
另外,time.mktime(time.localtime()) 和 time.time() 的结果之差是 gmNow 是 1411178199.0 timetimeNow 是 1411178199.284297
标签: python-3.x raspberry-pi pyephem