2017-09-29 3 views
2

Ich habe Zeit im J2000-Format, dh. Sekunden nach Mittag auf 1-1-2000, die ich in UTC Zeit in einem Array mit dem Format [Jahr-Monat-Tag Stunde: min: sec.millisec] konvertieren möchte. Gibt es eine Funktion in AstroPy oder etwas Ähnliches, um die Konvertierung durchzuführen?Wie konvertiert man J2000 Zeit in UTC in Python?

Input: Zeit in J2000: 559.889.620,293 Sekunden

gewünschte Ausgabe: Zeit in UTC: 2017.09.28 16: 53: 40,293

+0

Wenn Sie wirklich J2000 meinen, ist es [definiert] (http://aa.usno.navy.mil/faq/docs/ICRS_doc.php) als 12:00 1. Januar 2000 _terrestrial time_. Dies entspricht 11: 58: 56.171 UT1. Wenn es darauf ankommt, könnten Sie zu diesem Zeitpunkt den Unterschied zwischen UT1 und UTC nachschlagen, aber nicht mehr als ± 0,9 s. Sie müssen auch berücksichtigen, ob beim Zählen der Sekunden Schaltsekunden in die Zählung einbezogen wurden oder nicht. –

Antwort

4

Wenn Sie astropy verwenden möchten könnten Sie Time and TimeDelta from astropy.time:

>>> from astropy.time import TimeDelta, Time 
>>> from astropy import units as u 
>>> (Time(2000, format='jyear') + TimeDelta(559889620.293*u.s)).iso 
'2017-09-28 16:53:35.293' 

Die Time(2000, format='jyear') ist eine gute Alternative, wenn Sie wollen, was die sich nicht erinnern Baseline für julianische Daten (mittags am 1.1.2000) ist.

+1

Sie brauchen nicht "TimeDelta", und das Folgende funktioniert, weil Sie Zeit Zeitobjekte hinzufügen können: '(Time ('J2000.0') + 559889620.293 * u.s) .iso' –

3

Der Offset ist konstant, so dass Sie es einfach hinzufügen :

>>> OFFSET = datetime(2000,1,1,12) - datetime(1970,1,1) 
>>> datetime.utcfromtimestamp(559889620.293) + OFFSET 
datetime.datetime(2017, 9, 28, 16, 53, 40, 293000) 
3

Sie können einfach eine timedelta zu einer Basis datetime hinzuzufügen.

import datetime 
datetime.datetime(2000, 1, 1, 12, 0) + datetime.timedelta(seconds=559889620.293) 

kehrt:

datetime.datetime(2017, 9, 28, 16, 53, 40, 293000) 
Verwandte Themen