2013-12-20 11 views
2

Попытка конвертировать между стандартным питона даты и времени процедура datetime.datetime и Pyphem рутинного ephem.Date иногда бывают (кроме ожидаемого усечения) специфические различия в диапазоне одной секунды.Pyephem - разница во времени между datetime.datetime и 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 

Повторные вызовы дают результат, похожий на:

[email protected]:$ ./timedifference.py 
Datetime: 2013-12-20 08:28:11.536814 
Ephem : 2013/12/20 08:28:11 
[email protected]:$ ./timedifference.py 
Datetime: 2013-12-20 08:28:16.088484 
Ephem : 2013/12/20 08:28:15 

Последние две строки показывают 16.somethig секунд в Datetim, который преобразует до 15 секунд, чтобы ephem. Дата.

Есть ли объяснение?

ответ

3

От the PyEphem home page:

PyEphem использует простое число с плавающей точкой для представления даты и времени в его астрономии рутин.

Точность с плавающей точкой всегда приносит некоторый уровень приближения. Я думаю, это то, что вы видите в своем примере.

РЕДАКТИРОВАТЬ

При дополнительном рытье, причина не поймать десятые секунды в этом случае является то, что ephem ignores the microseconds при создании ephem.Date из DateTime. Похоже, есть исправление для этого подходит в версии 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' 
+0

Спасибо за ответ. Разве это не точная точность с точностью до python, чтобы поймать хотя бы десятые доли секунды? – Foehn

+0

@Foehn Да! См. Обновленный ответ. – mattexx

Смежные вопросы