2

尝试在标准 python 日期时间例程 datetime.datetime 和 Pyphem 例程 ephem.Date 之间转换有时一秒的范围内(除了预期的截断)存在特殊差异。

试试示例代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import ephem
import datetime

now_datetime = datetime.datetime.now()
now_ephem = ephem.Date(now_datetime)
print "Datetime: ", now_datetime
print "Ephem   : ", now_ephem

重复调用会产生类似于以下内容的输出:

thl@thl-lap-001:$ ./timedifference.py
Datetime:  2013-12-20 08:28:11.536814
Ephem   :  2013/12/20 08:28:11
thl@thl-lap-001:$ ./timedifference.py
Datetime:  2013-12-20 08:28:16.088484
Ephem   :  2013/12/20 08:28:15

最后两行显示 Datetim 中的 16.somethig 秒,将 15 秒转换为 ephem.Date。

有解释吗?

4

1 回答 1

3

PyEphem 主页

PyEphem 使用一个简单的浮点数来表示其天文学例程中的日期和时间。

浮点精度总是带来某种程度的近似。我认为这就是您在示例中看到的。

编辑

经过更多挖掘,在这种情况下它没有捕捉到十分之一秒的原因是 ephem在从日期时间创建 ephem.Date 时忽略了微秒。看起来在 3.7.5.2 版本中对此进行了修复

回答问题

在这种情况下,python 双精度浮点数是否不够精确以捕获至少十分之一秒?

明确地!

import ephem
'%f' % ephem.Date('2013/12/20 12:34:56')
=> '41627.024259'
'%f' % ephem.Date('2013/12/20 12:34:56.1')
=> '41627.024260'
于 2013-12-20T10:20:19.257 回答