時間と日付 (astropy.time

序言:序言

♪the astropy.time Packageは操作時間と日付の機能を提供する.特に、天文学で使用される時間スケール(例えば、UTC、TAI、UT 1、TDB)および時間表現(例えば、JD、MJD、ISO 8601)をサポートし、恒星時および重心補正のようなそれらを計算する必要がある。♪the astropy.time 高速かつメモリに基づく効率的な実装 PyERFA 包装紙で包む ERFA 時間とカレンダーの定例です。

すべての時間演算および算術演算は、内部で2つの64ビット浮動小数点を用いて時間を表す。浮動小数点アルゴリズムは 1 使用されています Time 物体は宇宙年齢範囲内の時間でアナ秒級の精度を保っている.

1

ショチュク,1997,離散計算幾何18(3):305-363

スタート

通常の使い方は astropy.time is to create a Time object by supplying one or more input time values as well as the time format そして time scale これらの価値観です入力時間は、例えば単一のスカラーであってもよい "2010-01-01 00:00:00" リストや numpy 以下に示す値配列.一般に、いずれの出力値も入力と同じ形状(スカラーまたは配列)を有する。

実例.

作成するには Time 目標:

>>> import numpy as np
>>> from astropy.time import Time
>>> times = ['1999-01-01T00:00:00.123456789', '2010-01-01T00:00:00']
>>> t = Time(times, format='isot', scale='utc')
>>> t
<Time object: scale='utc' format='isot' value=['1999-01-01T00:00:00.123' '2010-01-01T00:00:00.000']>
>>> t[1]
<Time object: scale='utc' format='isot' value=2010-01-01T00:00:00.000>

♪the format パラメータは、入力値(例えば、ISO、JD、またはUnix時間)をどのように解釈するかを指定する。♪the scale パラメータ指定 time scale 値(例えば、UTC、TT、またはUT 1)。♪the scale パラメータはオプションであり,デフォルトでUTCとしたが,以下のパラメータは除外した. Time from Epoch Formats それがそうです。

このようなことを書くことができます

>>> t = Time(times, format='isot')

入力されたフォーマットが明確に決定できる場合 format パラメータは必要ではないので、私たちはさらに簡略化することができます:

>>> t = Time(times)

現在,これらの時間の表現形式は,対応するJDおよびMJDフォーマットを要求することで得ることができる. Time 属性::

>>> t.jd  
array([2451179.50000143, 2455197.5       ])
>>> t.mjd  
array([51179.00000143, 55197.        ])

出力表示のすべての機能が通過可能である to_value method which also allows controlling the subformat それがそうです。例えば使用は numpy.longdouble より高精度な出力タイプとして:

>>> t.to_value('mjd', 'long')  
array([51179.00000143, 55197.        ], dtype=float128)

デフォルト表示形式は設定することで format 属性::

>>> t.format = 'fits'
>>> t
<Time object: scale='utc' format='fits' value=['1999-01-01T00:00:00.123'
                                               '2010-01-01T00:00:00.000']>
>>> t.format = 'isot'

UTCからTTに変換するなど、異なる時間スケールに変換することもできる。これは上と同じ属性機構を使っていますが新しいものに戻ります Time 対象::

>>> t2 = t.tt
>>> t2
<Time object: scale='tt' format='isot' value=['1999-01-01T00:01:04.307' '2010-01-01T00:01:06.184']>
>>> t2.jd  
array([2451179.5007443 , 2455197.50076602])

ISO(ISOT)とJDは t2 との違い t これらはTT時間尺度に対して表されるからである。もちろん、数字や文字列からは状況がそうであることがわかりません。

>>> print(t2.fits)
['1999-01-01T00:01:04.307' '2010-01-01T00:01:06.184']

通常の設定で適切な位置に時間値を設定することができます numpy 配列設定項文法::

>>> t2 = t.tt.copy()  # Copy required if transformed Time will be modified
>>> t2[1] = '2014-12-25'
>>> print(t2)
['1999-01-01T00:01:04.307' '2014-12-25T00:00:00.000']

♪the Time 対象者は欠損値をサポートしています 表操作 例えば接続とスタック:

>>> t2[0] = np.ma.masked  # Declare that first time is missing or invalid
>>> print(t2)
[-- '2014-12-25T00:00:00.000']

最後に、何が可能なのかをいくつかの例を挙げて説明する。詳細については、以下のAPI文書を参照されたい。

>>> dt = t[1] - t[0]
>>> dt  
<TimeDelta object: scale='tai' format='jd' value=4018.00002172>

ここで、時間スケールからTAIへの変換に注意してください。時差は一日で86400秒刻みしかありません。

>>> import numpy as np
>>> t[0] + dt * np.linspace(0.,1.,12)
<Time object: scale='utc' format='isot' value=['1999-01-01T00:00:00.123' '2000-01-01T06:32:43.930'
 '2000-12-31T13:05:27.737' '2001-12-31T19:38:11.544'
 '2003-01-01T02:10:55.351' '2004-01-01T08:43:39.158'
 '2004-12-31T15:16:22.965' '2005-12-31T21:49:06.772'
 '2007-01-01T04:21:49.579' '2008-01-01T10:54:33.386'
 '2008-12-31T17:27:17.193' '2010-01-01T00:00:00.000']>
>>> t.sidereal_time('apparent', 'greenwich')  
<Longitude [6.68050179, 6.70281947] hourangle>

Vbl.使用 astropy.time

時間対象基礎知識

はい。 astropy.time “時間”は時間の表示方式(“フォーマット”)と時間“目盛り”に関係なく時間の単一時刻であり,時間“目盛り”は時間単位のずれ量と目盛り関係を指定する.“日付”と“時間”の間に違いはないが,この2つの概念(通常用法では定義が緩い)は時間時刻の違いのみを表すためである.

時間形式.

時間フォーマットは、時間瞬間をどのように表すかを指定する。現在利用可能なフォーマットは Time.FORMATS 次の表にDICTとDICTを示す。これらのフォーマットのいずれも基底クラスから派生するクラスとして実現されている. TimeFormat 級友たち。このような構造は、提供されていない専用の時間フォーマットのためにユーザによって調整および拡張されることができる astropy.time それがそうです。

格式.

クラス

例示的なパラメータ

年.年

TimeBesselianEpoch

1950.0

byear_str

TimeBesselianEpochString

'B1950.0'

Cxcsec

TimeCxcSec

63072064.184

日時.

TimeDatetime

DateTime(2000,1,2,12,0,0)

10年.

TimeDecimalYear

2000.45

コンビネーション

TimeFITS

‘2000-01-01 T 00:00:00.000’

全地球測位システム(GPS)

TimeGPS

630720013.0

国際標準化機構

TimeISO

‘2000-01-01 00:00:00.000’

Isot

TimeISOT

‘2000-01-01 T 00:00:00.000’

JD

TimeJD

2451544.5

JYear

TimeJulianEpoch

2000.0

jyear_str

TimeJulianEpochString

'J2000.0'

MJD

TimeMJD

51544.0

plot_date

TimePlotDate

730120.0003703703

Unix

TimeUnix

946684800.0

unix_tai

TimeUnixTai

946684800.0

Yday

TimeYearDayTime

2000年:0001:00:00:00.000

うん。うん。

TimeYMDHMS

{‘年“:2010,”月“:3,”日“:1}

日時64

TimeDatetime64

Np.datetime 64(‘2000-01-01 T 01:01:01’)

注釈

♪the TimeFITS FormatはFITS標準の多くを実現している 2, 対も含めて LOCAL 時間刻みです。ただし,FITSは使用を推奨しない時間スケール名をサポートしており,これらの名前は初期化時に正式名称に変換されることに注意されたい.さらに特定の実現情報は UT(NIST) 時間スケールが変わらない場合にのみ格納される.

2

Rots et al. 2015, A&A 574:A36

書式を変更する

デフォルト表示形式は設定することで format 属性::

>>> t = Time('2000-01-02')
>>> t.format = 'jd'
>>> t
<Time object: scale='utc' format='jd' value=2451545.5>

なお、フォーマットを変更する場合、新しいフォーマットには現在の出力サブフォーマットが存在しない場合があります(以下の部分参照)。この場合、サブフォーマットは保持されない:

>>> t = Time('2000-01-02', format='fits', out_subfmt='longdate')
>>> t.value
'+02000-01-02'
>>> t.format = 'iso'
>>> t.out_subfmt
u'*'
>>> t.format = 'fits'
>>> t.value
'2000-01-02T00:00:00.000'
子格式

多くの利用可能な時間フォーマットクラスは、サブフォーマットの概念をサポートする。これは,入力解析/検証および出力においてフォーマットの基本トピックを変化させることを可能にする.

次の表は文字列フォーマットの利用可能なサブフォーマットを示している

iso, fits, and yday formats:

格式.

子格式

入出力

iso

date_hms

2001-01-02 03:04:05.678

iso

date_hm

2001-01-02 03:04

iso

日取り

2001-01-02

fits

date_hms

2001-01-02 T 03:04:05.678

fits

longdate_hms

+02001-01-02 T 03:04:05.678

fits

ナツメが長い.

+02001-01-02

yday

date_hms

2001年:032:03:04:05.678

yday

date_hm

2001:032:03:04

yday

日取り

2001年:032

Numerical formats such as mjd, jyear, or cxcsec all support the subformats: 'float', 'long', 'decimal', 'str', and 'bytes'. Here, 'long' uses numpy.longdouble for somewhat enhanced precision (with the enhancement depending on platform), and 'decimal' instances of decimal.Decimal for full precision. For the 'str' and 'bytes' subformats, the number of digits is also chosen such that time values are represented accurately.

入力で使用する場合、これらのフォーマットは、利用可能な精度のすべての値を正確に取り込むことができる単一の入力値を使用して時間を作成することを可能にする。 Time それがそうです。逆に,出力上の単一の値は使用される Time to_value あるいは…。 TimeDelta to_value 標準64ビット浮動小数点数よりも高い精度を有することができる:

>>> tm = Time('51544.000000000000001', format='mjd')  # String input
>>> tm.mjd  # float64 output loses last digit but Decimal gets it
51544.0
>>> tm.to_value('mjd', subfmt='decimal')  
Decimal('51544.00000000000000099920072216264')
>>> tm.to_value('mjd', subfmt='str')
'51544.000000000000001'

コントロールのサブフォーマットオプションの完全リスト Time これらのフォーマットは以下のとおりである.

格式.

子格式

byear

浮動小数点型、長整型、10進、文字列、バイト

cxcsec

浮動小数点型、長整型、10進、文字列、バイト

datetime64

DATE_HMS、DATE_HMM、DATE_HMS

decimalyear

浮動小数点型、長整型、10進、文字列、バイト

fits

DATE_HMS,DATE,LONG DATE_HMS,LONG DATE

gps

浮動小数点型、長整型、10進、文字列、バイト

iso

DATE_HMS、DATE_HMM、DATE_HMS

isot

DATE_HMS、DATE_HMM、DATE_HMS

jd

浮動小数点型、長整型、10進、文字列、バイト

jyear

浮動小数点型、長整型、10進、文字列、バイト

mjd

浮動小数点型、長整型、10進、文字列、バイト

plot_date

浮動小数点型、長整型、10進、文字列、バイト

unix

浮動小数点型、長整型、10進、文字列、バイト

unix_tai

浮動小数点型、長整型、10進、文字列、バイト

yday

DATE_HMS、DATE_HMM、DATE_HMS

コントロールのサブフォーマットオプションの完全リスト TimeDelta これらのフォーマットは以下のとおりである.

格式.

子格式

jd

浮動小数点型、長整型、10進、文字列、バイト

sec

浮動小数点型、長整型、10進、文字列、バイト

紀元からの時間フォーマット

The formats cxcsec, gps, unix, and unix_tai are special in that they provide a floating point representation of the elapsed time in seconds since a particular reference date. These formats have a intrinsic time scale which is used to compute the elapsed seconds since the reference date.

格式.

縮尺.

参考日.

cxcsec

TT

1998-01-01 00:00:00

unix

UTC

1970-01-01 00:00:00

unix_tai

TAI

1970-01-01 00:00:08

gps

TAI

1980-01-06 00:00:19

デフォルトでUTCを使用している他のフォーマットとは異なり、なければ scale 初期化しています Time 対象は,上記の固有小数桁を用いる.これは計算効率を向上させるためである.

時間尺度.

時間尺度(または time standard )は、“時間を測定するための仕様:時間の経過速度;または時点;または両方である”である。 3, 4. **

>>> Time.SCALES
('tai', 'tcb', 'tcg', 'tdb', 'tt', 'ut1', 'utc', 'local')

縮尺.

説明する.

国際原子時(TAI)

トリクロロベンゼン.

重心座標時間(TCB)

TCG

地心座標時(TCG)

TDB

重心動態時間(TDB)

TT TT

地面時間(TT)

UT 1.

世界時(UT 1)

世界を調和させるとき

世界を調整する時(UTC)

地元

現地時間目盛り(現地)

3

Wikipedia time standard 文章

4

SOFA タイムスタンプとカレンダーツール (PDF)

注釈

♪the local 時間スケールとは,自由に動作するクロックやシミュレーション時間(すなわち,目盛りが正しく定義されていない時間を表す)である.これは、他の時間スケールに変換することができず、以下の場合にのみ算術演算を行うことができることを意味する Time 規模のある実例 local …と一緒に TimeDelta 規模のある実例 local あるいは…。 None それがそうです。

サポートされる時間スケール間の変換システム(すなわち、除算 local )を次の図に示す。詳細についてはご参照ください Convert time scale 一節です。

../_images/time_scale_conversion.png

スカラーまたは配列

A Time オブジェクトは,単一の時間値または時間値配列を保持することができる.完全に入力時間の形式によって区別される.もし1つが Time オブジェクトが単一の値を保持すると,どのフォーマット出力も単一のスカラ値となり,配列も同様である.

例を引く

他の配列やリストと同様に Time 配列を保存するオブジェクトは購読可能であり,必要に応じてスカラーまたは配列オブジェクトを返す:

>>> from astropy.time import Time
>>> t = Time(100.0, format='mjd')
>>> t.jd
2400100.5
>>> t = Time([100.0, 200.0, 300.], format='mjd')
>>> t.jd  
array([2400100.5, 2400200.5, 2400300.5])
>>> t[:2]  
<Time object: scale='utc' format='mjd' value=[100. 200.]>
>>> t[2]
<Time object: scale='utc' format='mjd' value=300.0>
>>> t = Time(np.arange(50000., 50003.)[:, np.newaxis],
...          np.arange(0., 1., 0.5), format='mjd')
>>> t  
<Time object: scale='utc' format='mjd' value=[[50000.  50000.5]
 [50001.  50001.5]
 [50002.  50002.5]]>
>>> t[0]  
<Time object: scale='utc' format='mjd' value=[50000.  50000.5]>

NumPy手法が類似して適用されるNumPy関数

For Time instances holding arrays, many of the same methods and attributes that work on ndarray instances can be used. For example, you can reshape Time instances and take specific parts using reshape(), ravel(), flatten(), T, transpose(), swapaxes(), diagonal(), squeeze(), or take(). Similarly, on numpy version 1.17 and later corresponding functions as well as others that affect the shape, such as atleast_1d and rollaxis, work as expected. (The relevant functions have to be explicitly enabled in astropy source code; let us know if a numpy function is not supported that you think should work.)

実例.

再構築する. Time 例:

.. doctest-requires:: numpy>=1.17
>>> t.reshape(2, 3)
<Time object: scale='utc' format='mjd' value=[[50000.  50000.5 50001. ]
 [50001.5 50002.  50002.5]]>
>>> t.T
<Time object: scale='utc' format='mjd' value=[[50000.  50001.  50002. ]
 [50000.5 50001.5 50002.5]]>
>>> np.roll(t, 1, axis=0)
<Time object: scale='utc' format='mjd' value=[[50002.  50002.5]
 [50000.  50000.5]
 [50001.  50001.5]]>

注意してください ndarray 方法は、 flatten() (例えば、文書で議論されているように、不可能な場合にのみデータを複製するために、新しいデータビューを使用しようと試みる numpy reshape() )。

Some arithmetic methods are supported as well: min(), max(), ptp(), sort(), argmin(), argmax(), and argsort().

算数の方法を Time 例:

>> t.max()
<Time object: scale='utc' format='mjd' value=50002.5>
>> t.ptp(axis=0)  # doctest: +FLOAT_CMP
<TimeDelta object: scale='tai' format='jd' value=[2. 2.]>

入力形式を推定する

♪the Time クラス初期値設定項は曖昧な入力を受け付けないが,入力が明確な場合には自動推定を行う.これは,時間を対象として入力を提供するのに適している可能性がある. ymdhms 文字列です後者の場合、利用可能な文字列フォーマットが重複していないため、フォーマットを指定する必要はない。しかし,あらかじめフォーマットを知っていれば,フォーマットが提供されていれば,文字列解析の方が速い.

例を引く

入力フォーマットを推定するには、以下の操作を実行してください。

>>> from datetime import datetime
>>> t = Time(datetime(2010, 1, 2, 1, 2, 3))
>>> t.format
'datetime'
>>> t = Time('2010-01-02 01:02:03')
>>> t.format
'iso'

内部表示法

♪the Time 対象は時間の内部表示形式を儒略日を表す倍精度数字に維持する.この2つの数字の和は,その時間が与えられた日付に対する儒略日付である time scale それがそうです。人間の時間スケール(約100年)で精度がマイクロ秒を超えないことが要求されるユーザは,内部表現の詳細を安全に無視し,この部分をスキップすることができる.

この表現は基礎的なものである ERFA Cライブラリで実現します。ERFAルーチンは、常にペアの全体的な精度を維持することに注意している。ユーザは,内部の一部に整数日が含まれているにもかかわらず,他の部分には1日の小数が含まれているにもかかわらず,すべての変換の最適な精度を確保しているため,Total JDを提供する方式を内部JD対通過可能 jd1 そして jd2 属性::

>>> t = Time('2010-01-01 00:00:00', scale='utc')
>>> t.jd1, t.jd2
(2455198.0, -0.5)
>>> t2 = t.tai
>>> t2.jd1, t2.jd2  
(2455198., -0.49960648148148146)

時間オブジェクトの作成

許可の Time 以下にTimeオブジェクトを作成するパラメータを示す:

valNumpy ndarray、リスト、文字列、または数字

初期化表のデータをお願いします。

val2Numpy ndarray、List、StringまたはNumber;オプション

初期化表のデータをお願いします。

format文字列、オプション

入力値のフォーマット。

scale文字列、オプション

入力値の時間スケール。

precision0と9(0と9を含む)の間の整数

秒を浮動小数点出力とした場合の小数精度.

in_subfmt応力.応力

UNIX GLOBは,入力時間を解析するためのサブフォーマットを選択する.

out_subfmt応力.応力

UNIX GLOBは,出力時間のサブフォーマットを選択する.

位置EarthLocation またはタプル、オプションEarthLocationまたはタプル、オプション

タプルであれば3です Quantity 地心座標の長さ単位を有する項目、または大地座標が経度、緯度、およびオプションの高さを有する項目。単一の位置であってもよいし、各入力時間に対応する1つの位置であってもよい。

VAL

♪the val パラメータは入力時間を指定し、単一の文字列や数字であってもよいし、Pythonリストであってもよい `numpy 文字列配列または数字配列。初期化する Time 対象は,それである. must 必ずその場にいなければなりません。

ほとんどの場合、あなたはまた指定する必要があります time scale 通過する. scale 論争する。♪the Time 類は決して見当がつかない time scale 簡明な例としては

>>> t1 = Time(50100.0, scale='tt', format='mjd')
>>> t2 = Time('2010-01-01 00:00:00', scale='utc')

新しいものを作ることができます Time 1つまたは複数の既存の時間オブジェクトのうちの1つまたは複数。この場合、明示的に指定されない限り、第1のオブジェクトからフォーマットおよび割合が推定される。**

>>> Time([t1, t2])  
<Time object: scale='tt' format='mjd' value=[50100. 55197.00076602]>

Val 2

♪the val2 パラメータは高精度が必要な場合に用いることができる.思い出してみてください時間の内部表示は astropy.time 2つの倍精度数字であり,加算すると儒略日付である.提供すれば val2 パラメータと val 2番目の内部時間値を設定する場合は、以下の操作を実行してください。正確に説明した val2 入力フォーマットクラスによって決定される.すべての文字列の値フォーマットは無視します val2 また、すべてのデジタル入力は、この2つの値を最も高い精度を維持するように効率的に加算する。例えば:

>>> t = Time(100.0, 0.000001, format='mjd', scale='tt')
>>> t.jd, t.jd1, t.jd2  
(2400100.500001, 2400101.0, -0.499999)

フォーマット

♪the `format パラメータ設定時間 time format 上述したように、入力時間に応じてフォーマットが明示的に決定されない限り、必要である。

縮尺.

The scale argument sets the time scale and is required except for time formats such as plot_date (TimePlotDate) and unix (TimeUnix). These formats represent the duration in SI seconds since a fixed instant in time is independent of time scale. See the Time from Epoch Formats for more details.

精度がよい

♪the precision 秒を含む値を出力する場合、設定は文字列フォーマットに影響を与える。0から9の間の整数でなければならず,文字列からの入力時間値は機能しない.デフォルト精度は3です。9桁の制限は ERFA 点数秒を処理する。実際には、これは問題ではないはずだ。**

>>> t = Time('B1950.0', precision=3)
>>> t.byear_str
'B1950.000'
>>> t.precision = 0
>>> t.byear_str
'B1950'

in_subfmt

♪the in_subfmt パラメータは1つまたは複数の選択を提供する subformat 入力されたサブフォーマットの値に使用することができる。特にUnixスタイルのワイルドカードを用いて許可されたサブフォーマットを複数選択することができる. * そして ? Pythonにあるように fnmatch モジュールです。

デフォルト値です。 in_subfmt はい。 * それは利用可能なサブフォーマットに一致します。これにより、未知または異種サブフォーマットを有する値を容易に入力することができる:

>>> Time(['2000:001', '2000:002:03:04', '2001:003:04:05:06.789'])
<Time object: scale='utc' format='yday'
 value=['2000:001:00:00:00.000' '2000:002:03:04:00.000' '2001:003:04:05:06.789']>

明示的に指定することができます in_subfmt あるサブフォーマットを厳密に要求するために:

>>> t = Time('2000:002:03:04', in_subfmt='date_hm')
>>> t = Time('2000:002', in_subfmt='date_hm')  
Traceback (most recent call last):
  ...
ValueError: Input values did not match any of the formats where the
format keyword is optional ['astropy_time', 'datetime',
'byear_str', 'iso', 'isot', 'jyear_str', 'yday']

out_subfmt

♪the out_subfmt パラメータは似ています in_subfmt しかし、出力フォーマット設定に適しています。複数の照合子形式の場合には、第1の照合子形式を用いる。

>>> Time('2000-01-01 02:03:04', out_subfmt='date').iso
'2000-01-01'
>>> Time('2000-01-01 02:03:04', out_subfmt='date_hms').iso
'2000-01-01 02:03:04.000'
>>> Time('2000-01-01 02:03:04', out_subfmt='date*').iso
'2000-01-01 02:03:04.000'
>>> Time('50814.123456789012345', format='mjd', out_subfmt='str').mjd
'50814.123456789012345'

別項参照 subformat 一節です。

位置

このオプションのパラメータは使用されます EarthLocation オブジェクトまたは初期化可能な任意の形態のタプル:地心座標(X、Y、Z)を有するタプル、または大地座標(経度、緯度、高さ、高度デフォルトゼロ)を有するタプルを含む。これらは観測者の位置に敏感な時間スケール(現在はTDBのみであり,これは観測者の位置に敏感な時間スケールに依存する. PyERFA 定例プログラム erfa.dtdb TDBとTTとの間の時間偏差)と、明確な経度が与えられていない場合の恒星時間を決定する。

>>> t = Time('2001-03-22 00:01:44.732327132980', scale='utc',
...          location=('120d', '40d'))
>>> t.sidereal_time('apparent', 'greenwich')  
<Longitude 12. hourangle>
>>> t.sidereal_time('apparent')  
<Longitude 20. hourangle>

注釈

将来のバージョンでは、天文台オブジェクトおよび/または名前を追加する可能性を増加させたい。

現在の時間を取得する

現在の時間は Time 対象使用 now クラス方法::

>>> nt = Time.now()
>>> ut = Time(datetime.utcnow(), scale='utc')

この二人は親しいはずです。

C言語に基づく高速日付文字列解析器

Time formats that are based on a date string representation of time, including TimeISO, TimeISOT, and TimeYearDayTime, make use of a fast C-based date parser that improves speed by a factor of 20 or more for large arrays of times.

CパーサはPythonベースのパーサよりも(Pythonに依存する) strptime )である。特に、月または日付のようなフィールドは、常に固定数のASCII数字を有していなければならない。例えばPython解析器は 2000-1-2T3:04:5.23 C解析器には 2000-01-02T03:04:05.23

サブフォーマットを入力しない限り、デフォルトでCパーサを有効にします。 in_subfmt パラメータはデフォルト値とは異なる '*' それがそうです。高速C解析器が日値を解析できなければ Time 初期化器はPython解析器に自動的に落ちます。

どの解析器を使用するかを明示的に制御する必要があるごく少数の場合には,1つの構成項がある. time.conf.use_fast_parser これは設定できます。黙認する. 'True' これは高速解析器を試し、必要に応じてPython解析器を直接使用することを意味します。なお、構成値は、boolオブジェクトではなく文字列である。

例えば、Cパーサを無効にするには、以下のように使用してください。

>>> from astropy.time import conf
>>> date = '2000-1-2T3:04:5.23'
>>> t = Time(date, format='isot')  # Succeeds by default
>>> with conf.set_temp('use_fast_parser', 'False'):
...     t = Time(date, format='isot')
...     print(t)
2000-01-02T03:04:05.230

Cパーサを強制するユーザ(例えば、テストで)の使用:

>>> with conf.set_temp('use_fast_parser', 'force'):
...     try:
...          t = Time(date, format='isot')
...     except ValueError as err:
...          print(err)
Input values did not match the format class isot:
ValueError: fast C time string parser failed: non-digit found where digit (0-9) required

使用時間オブジェクト

提供的操作 Time 対象は:

  • 配列値の時間値の取得と設定 Time 物体です。

  • 欠落(マスク)値を設定する.

  • 特定のイベントにおける時間値の表示形式を取得する. time format それがそうです。

  • 同じ時間値を取得するが異なる時間値を参照する新しい時間オブジェクト time scale それがそうです。

  • 計算して sidereal time 時間値に対応する.

  • 時間にかかわる算数をする Time および/または TimeDelta 物体です。

取得と設定値

既存の Time オブジェクトは,通常のものを使用することができる numpy 配列項文法は、単一の項または項のサブセットを取得するために使用される。返り値は Time すべての同じ属性を持つオブジェクト.

実例.

プロジェクトまたはプロジェクトのサブセットを取得するには、以下の操作を実行してください。

>>> t = Time(['2001:020', '2001:040', '2001:060', '2001:080'],
...          out_subfmt='date')
>>> print(t[1])
2001:040
>>> print(t[1:])
['2001:040' '2001:060' '2001:080']
>>> print(t[[2, 0]])
['2001:060' '2001:020']

配列の値に適切な値を設定することもできます Time 対象::

>>> t = Time(['2001:020', '2001:040', '2001:060', '2001:080'],
...          out_subfmt='date')
>>> t[1] = '2010:001'
>>> print(t)
['2001:020' '2010:001' '2001:060' '2001:080']
>>> t[[2, 0]] = '1990:123'
>>> print(t)
['1990:123' '2010:001' '1990:123' '2001:080']

設定時の新しい値(右側)は、以下の3つの可能性のうちの1つであってもよい。

  • スカラ文字列値または文字列値配列は、各値が有効な時間フォーマットであり、自動的に解析して作成することができる Time 物体です。

  • 各値は同じ値を有する値または値の配列 format として Time 設置中の対象。例えば浮動小数点や numpy オブジェクトの浮動小数点配列である. format='unix' それがそうです。

  • Time 対象は同じものを持つ location (でも) scale そして format 同じ必要はありません)。右側の値が変換されるので時間 scale マッチです。

任意の項目が設定されている限り、内部キャッシュ(参照) Caching )と delta_tdb_tt および/または delta_ut1_utc (設定されている場合)オフセットを変換する.

もし要求があれば Time 相手は不変で writeable 属性は False. In this case, attempting to set a value will raise a ValueError: Time object is read-only. See the section on Caching 例を挙げましょう

価値が足りない.

♪the Time そして TimeDelta オブジェクトは,値を欠落または無効とマークする機能をサポートする.これはマスクとも呼ばれ、特に 表操作 例えば接続とスタックです

例を引く

1つ以上の項目を欠落に設定するには、特別な値を指定してください numpy.ma.masked **

>>> t = Time(['2001:020', '2001:040', '2001:060', '2001:080'],
...          out_subfmt='date')
>>> t[2] = np.ma.masked
>>> print(t)
['2001:020' '2001:040' -- '2001:080']

注釈

配列要素を numpy.ma.masked (missing) overwrites the actual time data and therefore there is no way to recover the original value. In this sense, the numpy.ma.masked value behaves just like any other valid Time value when setting. This is similar to how Pandas missing data 仕事をしていますが NumPy masked arrays それは、別個のマスクアレイを維持し、底層データを保持する。はい。 Time 対象者. mask 属性は読みのみであり,直接設定することはできない.

オブジェクト内の1つまたは複数の値がマスクされると、どの動作もこれらの値をマスクとして伝播し、フォーマット属性、例えばフォーマット属性にアクセスする。 unix あるいは…。 value 1つに戻ります MaskedArray 対象::

>>> t.unix  
masked_array(data = [979948800.0 981676800.0 -- 985132800.0],
             mask = [False False  True False],
       fill_value = 1e+20)

ご覧になれます mask ただし、これは読み取り専用であり、設定マスクは常に項を設定することによって masked それがそうです。

>>> t.mask
array([False, False,  True, False]...)
>>> t[:2] = np.ma.masked

警告

欠損値サポートの内部実装は一時的であり,後続バージョンで変更される可能性がある.これは次節の情報に影響を与える.しかし,欠落値を一緒に使用するためのAPIが文書に記録されている. Time そして TimeDelta 対象は安定している。

フォーマットクラスと不足値をカスタマイズする

オブジェクトはカスタムタイムフォーマットを作成した上級ユーザ TimeFormat サブクラスは、クラスを修正する必要がある場合があります もし不足値をサポートしたいなら それがそうです。欠損値を利用しないアプリケーションに対しては,何の変更も必要ない.

中に値が足りない TimeFormat subclass object are marked by setting the corresponding entries of the jd2 attribute to be numpy.nan (but this is never done directly by the user). For most array operations and numpy functions the numpy.nan entries are propagated as expected and all is well. However, this is not always the case, and in particular the ERFA ルーチンは通常サポートされていません numpy.nan 優雅に値をとる。

以下の場合 numpy.nan 受け入れられないのであれば,Formatクラスの手法は使用すべきである. jd2_filled 属性ではなく jd2 それがそうです。これは取って代わる numpy.nan 使用 0.0 それがそうです。以来. jd2 常に-1から+1の範囲で 0.0 許容関数は、“合理的な”値を返し、その後、これらの値は、任意の後続の出力においてマスクされるであろう。ご参照ください value 財産.財産 TimeDecimalYear 任意の例のフォーマット。

表示を得る

時間的瞬間は、例えば、ISO形式で表される日付文字列など、異なる方法で表すことができる ('1999-07-23 04:31:00' )または1998.0以降の秒数 (49091460.0 )または修正された儒略日 (51382.187451574 )。

対象の表示形式 Time フォーマット名に対応するオブジェクト属性を取得することにより、特定のフォーマットのオブジェクトを取得することができる。利用可能なフォーマット名のリストは time format 一節です。

>>> t = Time('2010-01-01 00:00:00', format='iso', scale='utc')
>>> t.jd        # JD representation of time in current scale (UTC)
2455197.5
>>> t.iso       # ISO representation of time in current scale (UTC)
'2010-01-01 00:00:00.000'
>>> t.unix      # seconds since 1970.0 (UTC)
1262304000.0
>>> t.datetime  # Representation as datetime.datetime object
datetime.datetime(2010, 1, 1, 0, 0)
例を引く

1つのオブジェクトの表示形式を取得するには、以下の操作を実行してください Time 対象::

>>> import matplotlib.pyplot as plt  
>>> jyear = np.linspace(2000, 2001, 20)  
>>> t = Time(jyear, format='jyear')  
>>> plt.plot_date(t.plot_date, jyear)  
>>> plt.gcf().autofmt_xdate()  # orient date labels at a slant  
>>> plt.draw()  

時間刻みを切り替える

新しいのです Time オブジェクトは同じ時間値を持つが,新しいものを引用している time scale タイムスタンプ名に対応するオブジェクト属性を取得することにより作成することができる。利用可能なタイムスタンプ名のリストは time scale 部分と下図に時間スケール変換のネットワークを示す.

../_images/time_scale_conversion.png
実例.

作成するには Time 新しい時間スケールを持つオブジェクト:

>>> t = Time('2010-01-01 00:00:00', format='iso', scale='utc')
>>> t.tt        # TT scale
<Time object: scale='tt' format='iso' value=2010-01-01 00:01:06.184>
>>> t.tai
<Time object: scale='tai' format='iso' value=2010-01-01 00:00:34.000>

In this process the format and other object attributes like lon, lat, and precision are also propagated to the new object.

あるように Time Object Basics 部分,a Time オブジェクトは、そのいくつかの要素を明示的に設定することによってのみ変更されます。そこで,時間スケールを変更する過程は,元のオブジェクトのコピーを作成し,コピー中の内部時間値を新たな時間スケールに変換することから始まる.新しい Time オブジェクトは属性アクセスから返される.

キャッシュ.キャッシュ

大型配列では,異なるタイムスタンプやフォーマットに変換する計算に非常に時間がかかる可能性がある.計算を繰り返すことを避けるために Time あるいは…。 TimeDelta インスタンスは、このような変換を内部キャッシュ:

>>> t = Time(np.arange(1e6), format='unix', scale='utc')

>>> time x = t.tt  
CPU times: user 263 ms, sys: 4.02 ms, total: 267 ms
Wall time: 267 ms

>>> time x = t.tt  
CPU times: user 28 µs, sys: 9 µs, total: 37 µs
Wall time: 32.9 µs

出力精度やサブフォーマットの変更などの操作はキャッシュをクリアする.内部キャッシュを明示的にクリアするには、以下の動作を実行してください。

>>> del t.cache

>>> time x = t.tt  
CPU times: user 263 ms, sys: 4.02 ms, total: 267 ms
Wall time: 267 ms

変換された(およびキャッシュされた)バージョンと元のバージョンとの間の整合性を確保するために、変換されたオブジェクトは書き込み不可に設定される。例えば:

>>> x = t.tt
>>> x[1] = '2000:001'
Traceback (most recent call last):
  ...
ValueError: Time object is read-only. Make a copy() or set "writeable" attribute to True.

オブジェクトを修正する必要がある場合、まずコピー、例えば、 x = t.tt.copy() それがそうです。

ずれを変換する

上の図のオレンジ色の円にわたる時間スケール変換には、モデルまたは観測に依存する追加のオフセット時間値が必要となる。参照してください SOFA Time Scale and Calendar Tools もっと細かいことを知っています。

この2つの属性は delta_ut1_utc そして delta_tdb_tt これらのオフセット時間を明示的に設定する方法を提供する。これらは、それぞれタイムスタンプオフセットUT 1−UTCおよびTDB−TTを表す。例えば:

>>> t = Time('2010-01-01 00:00:00', format='iso', scale='utc')
>>> t.delta_ut1_utc = 0.334  # Explicitly set one part of the transformation
>>> t.ut1.iso    # ISO representation of time in UT1 scale
'2010-01-01 00:00:00.334'

UT 1からUTCへのオフセットについては、提供された観測値を補間しなければならない International Earth Rotation and Reference Systems (IERS) Service それがそうです。 astropy IERS中の値は、1973~01年1月~01年から今後1年までをカバーするIERSの値を自動的にダウンロードして使用される。また、 astropy パケットは、1962年から少し前までの期間をカバーする公告Bに提供される値のデータテーブルとバンドルされる。 astropy 手を離して。

当たる delta_ut1_utc 属性が明示的に設定されていない場合は、IERS値が使用されます(いくつかのMbファイルのダウンロードが最初に開始されます)。IERS値をどのように使用するかに関する詳細な情報 astropy 時間と座標、自動ダウンロードの制御方法を知っていますので、参照してください IERSデータアクセス (astropy.utils.iers ) それがそうです。以下の例は、どのように変換するかを説明する UT1 自動ダウンロード機能とともに拡張:

>>> t = Time('2016:001')
>>> t.ut1  
Downloading https://maia.usno.navy.mil/ser7/finals2000A.all
|==================================================================| 3.0M/3.0M (100.00%)         6s
<Time object: scale='ut1' format='yday' value=2016:001:00:00:00.082>

注釈

♪the IERS_Auto クラスは、必要に応じて最新バージョンを自動的にダウンロードすることによって、IERSテーブルが最新のままであることを保証する機構を含む。これはIERS表が最先端の地球自転確定値と予測値を確保できることを意味している。ユーザーとしては あなたの責任 もしあなたの科学がこれに依存してIERS予測の正確性を理解するなら。もしあなたが要求すれば UT1-UTC IERSテーブルのデータ範囲を超える時間については、最も近い利用可能な値が提供される。

TDBからTTオフセットの場合、ほとんどのユーザは提供するだけでよい lon そして lat 作成しています Time 相手。もし…。 delta_tdb_tt 属性が明示的に設定されていない場合 PyERFA 定例プログラム erfa.dtdb TDBからTTへのオフセット量を計算するために使用される。注意してください lon そして lat 明示的に初期化されていなければ,0.0度の値を用いる.

例を引く

次のコードコピー SOFA Time Scale and Calendar Tools 書類です。これは,UTCからすべてのサポートされる時間スケール(TAI,TCB,TCG,TDB,TT,UT 1,UTC)への変換を行う.これは観察者の位置(ここでは緯度と経度)を必要とする。**

>>> import astropy.units as u
>>> t = Time('2006-01-15 21:24:37.5', format='iso', scale='utc',
...          location=(-155.933222*u.deg, 19.48125*u.deg))
>>> t.utc.iso
'2006-01-15 21:24:37.500'
>>> t.ut1.iso  
'2006-01-15 21:24:37.834'
>>> t.tai.iso
'2006-01-15 21:25:10.500'
>>> t.tt.iso
'2006-01-15 21:25:42.684'
>>> t.tcg.iso
'2006-01-15 21:25:43.323'
>>> t.tdb.iso
'2006-01-15 21:25:42.684'
>>> t.tcb.iso
'2006-01-15 21:25:56.894'

ハッシュ.ハッシュ

A user can generate a unique hash key for scalar (0-dimensional) Time or TimeDelta objects. The key is based on a tuple of jd1, jd2, scale, and location (if present, None otherwise).

2つありますのでご注意ください Time 対象が異なる scale 同等の比較は可能であるが,異なるハッシュ鍵を持つ.これは性能によって駆動される実際の考慮要因であるが,多くの場合理想的な行動を表す.

印刷時間配列

もしあなたの times 配列には多くの要素が含まれています value パラメータは表示されます Time 客体. t それが呼び出されたり印刷されたりすると。表示する要素数をコントロールする場合は、 thresholdnp.printoptions 詳細は以下のとおりである.

>>> many_times = np.arange(1000)
>>> t = Time(many_times, format='cxcsec')
>>> with np.printoptions(threshold=10):
...     print(repr(t))
...     print(t.iso)
<Time object: scale='tt' format='cxcsec' value=[  0.   1.   2. ... 997. 998. 999.]>
['1998-01-01 00:00:00.000' '1998-01-01 00:00:01.000'
 '1998-01-01 00:00:02.000' ... '1998-01-01 00:16:37.000'
 '1998-01-01 00:16:38.000' '1998-01-01 00:16:39.000']

恒星の時

見かけまたは平均恒星時間は次式で計算できる sidereal_time() それがそうです。この方法は1つに戻ります Longitude 時間角単位で,デフォルトの場合は Time オブジェクトは初期化されています。スケール変換のように ERFA Cライブラリルーチンは、異なるIAU解像度に従った計算をサポートする舞台裏で使用される。

例を引く

恒星時間を計算するには以下の操作を実行してください

>>> t = Time('2006-01-15 21:24:37.5', scale='utc', location=('120d', '45d'))
>>> t.sidereal_time('mean')  
<Longitude 13.08952187 hourangle>
>>> t.sidereal_time('apparent')  
<Longitude 13.08950368 hourangle>
>>> t.sidereal_time('apparent', 'greenwich')  
<Longitude 5.08950368 hourangle>
>>> t.sidereal_time('apparent', '-90d')  
<Longitude 23.08950368 hourangle>
>>> t.sidereal_time('apparent', '-90d', 'IAU1994')  
<Longitude 23.08950365 hourangle>

時間の増加

時間演算をサポートし、使用する TimeDelta 級友たち。以下の動作を実行することができる。

  • 創立 TimeDelta 明示的に1つのクラスオブジェクトをインスタンス化することで実現する.

  • 創立 TimeDelta 2つ引くことで Time 物体です。

  • 1つ追加する TimeDelta 1つまで Time 対象は新しいものを得るために Time それがそうです。

  • Aを引く TimeDelta 1つから Time 対象は新しいものを得るために Time それがそうです。

  • 二つ追加する TimeDelta 新しいものを手に入れることができます TimeDelta それがそうです。

  • ある項を否定する TimeDelta あるいはその絶対値をとる.

  • 掛けるか割るか TimeDelta 定数または配列を通過する.

  • 転換する. TimeDelta 時間のように往復する相手 Quantity はい。

♪the TimeDelta 類派生自 Time クラスは,その多くの属性を共有する.1つの違いは、時間スケールは1日ちょうど86400秒でなければならないということだ。したがって,縮尺はUTCではない.

利用可能な時間フォーマットは、:

格式.

クラス

TimeDeltaSec

JD

TimeDeltaJD

日時.

TimeDeltaDatetime

実例.

使用 TimeDelta オブジェクトは、以下のいくつかの例で説明される。

>>> t1 = Time('2010-01-01 00:00:00')
>>> t2 = Time('2010-02-01 00:00:00')
>>> dt = t2 - t1  # Difference between two Times
>>> dt
<TimeDelta object: scale='tai' format='jd' value=31.0>
>>> dt.sec
2678400.0

>>> from astropy.time import TimeDelta
>>> dt2 = TimeDelta(50.0, format='sec')
>>> t3 = t2 + dt2  # Add a TimeDelta to a Time
>>> t3.iso
'2010-02-01 00:00:50.000'

>>> t2 - dt2  # Subtract a TimeDelta from a Time
<Time object: scale='utc' format='iso' value=2010-01-31 23:59:10.000>

>>> dt + dt2  
<TimeDelta object: scale='tai' format='jd' value=31.0005787037>

>>> import numpy as np
>>> t1 + dt * np.linspace(0, 1, 5)
<Time object: scale='utc' format='iso' value=['2010-01-01 00:00:00.000'
'2010-01-08 18:00:00.000' '2010-01-16 12:00:00.000' '2010-01-24 06:00:00.000'
'2010-02-01 00:00:00.000']>

♪the TimeDelta ある to_value method which supports controlling the type of the output representation by providing either a format name and optional subformat あるいは効果的な astropy 単位::

>>> dt.to_value(u.hr)
744.0
>>> dt.to_value('jd', 'str')
'31.0'

時間増分の時間刻み

上で示したように2つのUTC時間の差は TimeDelta 縮尺はタイ式です。これは,ユーザが差の2つの時間(うるう秒のため,1日がつねに86400秒であるわけではない)を知らない限り,UTC時間差を一意に定義できないためである.他のすべてのタイムスタンプについては TimeDelta 最初の相続 Time 物体です。

実例.

1回のイベントの時間スケールを取得するには、以下の操作を実行してください TimeDelta 対象::

>>> t1 = Time('2010-01-01 00:00:00', scale='tcg')
>>> t2 = Time('2011-01-01 00:00:00', scale='tcg')
>>> dt = t2 - t1
>>> dt
<TimeDelta object: scale='tcg' format='jd' value=365.0>

いつ? TimeDelta オブジェクトを追加または減算する Time 対象の場合は,それに応じて割合を変換し,最終的な割合は Time 対象::

>>> t2 + dt
<Time object: scale='tcg' format='iso' value=2012-01-01 00:00:00.000>
>>> t2.tai
<Time object: scale='tai' format='iso' value=2010-12-31 23:59:27.068>
>>> t2.tai + dt
<Time object: scale='tai' format='iso' value=2011-12-31 23:59:27.046>

TimeDelta オブジェクトを互換性のある割合を持つオブジェクトにしか変換できない(すなわち、差分時間を知る必要がない割合):

>>> dt.tt  
<TimeDelta object: scale='tt' format='jd' value=364.999999746>
>>> dt.tdb  
Traceback (most recent call last):
  ...
ScaleValueError: Cannot convert TimeDelta with scale 'tcg' to scale 'tdb'

TimeDelta オブジェクトは未定義の割合を持つことも可能であり,この場合,それらの割合は他のオブジェクトの割合に一致すると仮定する. Time あるいは…。 TimeDelta オブジェクト(UTC時間を用いればTAI):

>>> t2.tai + TimeDelta(365., format='jd', scale=None)
<Time object: scale='tai' format='iso' value=2011-12-31 23:59:27.068>

注釈

なぜなら内部では Time 浮動小数点数を用いた場合,丸め誤りは2回不厳密に等しくなる可能性があり,数学的にも厳密に等しいはずである.特にUTCでは、UTCに追加すると驚くべき行動を引き起こす可能性があります TimeDelta これは,UTCの目盛りを持つことができず,UTC時間はまずTAIに変換し,その後加算を行い,最後に時間をUTCに戻す.したがって、丸め誤差が生じる可能性があり、これは、予期される等式であっても成立しない可能性があることを意味する。

>>> t = Time(2450000., 1e-6, format='jd')
>>> t + TimeDelta(0, format='jd') == t
False

質心と日光光行時に修正する

光子が天文台に到達する時間は、双星または系外惑星の日食/凌日タイミングのような正確なタイミング動作に特に有用ではない。これは天文台の位置の変化により光子が早く到着したり遅くなったりするためである。解決策は,光子が標準位置(太陽系重心または日心)に到達する時間を計算することである。

例を引く

グリニッジからの低新星IP Pegが観察され、UTC時間スケールにMJD形式の時間リストがあると仮定します。そして、それに応じたものを作成することができます Time そして SkyCoord 対象が重心に到達する光線の進行時間を計算すると,以下のようになる.

>>> from astropy import time, coordinates as coord, units as u
>>> ip_peg = coord.SkyCoord("23:23:08.55", "+18:24:59.3",
...                         unit=(u.hourangle, u.deg), frame='icrs')
>>> greenwich = coord.EarthLocation.of_site('greenwich')  
>>> times = time.Time([56325.95833333, 56325.978254], format='mjd',
...                   scale='utc', location=greenwich)  
>>> ltt_bary = times.light_travel_time(ip_peg)  
>>> ltt_bary 
<TimeDelta object: scale='tdb' format='jd' value=[-0.0037715  -0.00377286]>

光の旅行時間を日光の中心に変更したい場合は、使用します。

>>> ltt_helio = times.light_travel_time(ip_peg, 'heliocentric') 
>>> ltt_helio 
<TimeDelta object: scale='tdb' format='jd' value=[-0.00376576 -0.00376712]>

この方法は1つに戻ります TimeDelta 光子が重心または日心に到達する時間を与えるために、あなたの時間に加算することができるオブジェクト。ここでは、時間スケールに気をつけて使用すべきです。時間スケールに関するより詳細な情報は、ご参照ください 時間尺度. それがそうです。

日心は固定点ではないので、日心の重力は変化していく。したがって,TDBのような相対論的時間スケールを用いることは特に適切ではなく,歴史的には,日心までの時間スケールを補正することはUTC時間スケールで与えられている:

>>> times_heliocentre = times.utc + ltt_helio  

重心の補正は日心よりも正確であり,重心は重力一定の固定点であるためである。最大の精度を得るためには,つねに統一された速度で計時される時間スケールで重心時間を補正することが望まれ,理想的には,時間スケールのタイミング速度はクロックが重心で計時する速度と相関する。したがって、重心補正時間は、通常、TDB時間スケール:

>>> time_barycentre = times.tdb + ltt_bary  

デフォルトでは,地球と太陽の位置と速度を用いて光進行時間を計算する. ERFA ルーチンですが、JPL天体暦(派生自動力学モデル)を使用してより正確な計算を行うこともできます。JPL天体暦を用いた一例は:

>>> ltt_bary_jpl = times.light_travel_time(ip_peg, ephemeris='jpl') 
>>> ltt_bary_jpl 
<TimeDelta object: scale='tdb' format='jd' value=[-0.0037715  -0.00377286]>
>>> (ltt_bary_jpl - ltt_bary).to(u.ms) 
<Quantity [-0.00132325, -0.00132861] ms>

内蔵天体暦とジェット推進実験室天体暦との差は通常1/100ミリ秒オーダーであるため,内蔵天体暦は多くの用途に適用されるべきである。利用可能な天体暦のより詳細な情報については、JPL天体暦を使用する要求も含まれていますので、参照されたい 太陽系天体暦 それがそうです。

類似量との相互作用

可能な場合には Quantity 時間単位を持つ対象は TimeDelta 未定義割合のオブジェクト(精度は必然的に低いにもかかわらず).構造過程の入力としても使えます Time そして TimeDelta 相手、そして TimeDelta オブジェクトは変換することができます Quantity 任意の時間単位のオブジェクト.

実例.

使用 Quantity 時間単位の対象::

>>> import astropy.units as u
>>> Time(10.*u.yr, format='gps')   # time-valued quantities can be used for
...                                # for formats requiring a time offset
<Time object: scale='tai' format='gps' value=315576000.0>
>>> Time(10.*u.yr, 1.*u.s, format='gps')
<Time object: scale='tai' format='gps' value=315576001.0>
>>> Time(2000.*u.yr, format='jyear')
<Time object: scale='tt' format='jyear' value=2000.0>
>>> Time(2000.*u.yr, format='byear')
...                                # but not for Besselian year, which implies
...                                # a different time scale
...
Traceback (most recent call last):
  ...
ValueError: Input values did not match the format class byear:
ValueError: Cannot use Quantities for 'byear' format, as the interpretation would be ambiguous. Use float with Besselian year instead.

>>> TimeDelta(10.*u.yr)            # With a quantity, no format is required
<TimeDelta object: scale='None' format='jd' value=3652.5>

>>> dt = TimeDelta([10., 20., 30.], format='jd')
>>> dt.to(u.hr)                    # can convert TimeDelta to a quantity  
<Quantity [240., 480., 720.] h>
>>> dt > 400. * u.hr               # and compare to quantities with units of time
array([False,  True,  True]...)
>>> dt + 1.*u.hr                   # can also add/subtract such quantities  
<TimeDelta object: scale='None' format='jd' value=[10.04166667 20.04166667 30.04166667]>
>>> Time(50000., format='mjd', scale='utc') + 1.*u.hr  
<Time object: scale='utc' format='mjd' value=50000.0416667>
>>> dt * 10.*u.km/u.s              # for multiplication and division with a
...                                # Quantity, TimeDelta is converted  
<Quantity [100., 200., 300.] d km / s>
>>> dt * 10.*u.Unit(1)             # unless the Quantity is dimensionless  
<TimeDelta object: scale='None' format='jd' value=[100. 200. 300.]>

カスタムフォーマットを作成する

特定のアプリケーションはカスタマイズする必要があるかもしれません Time フォーマット、この機能は、作成することによって TimeFormat 級友たち。このようなサブクラスがコードに定義されると、Formatクラスおよび対応する名前は、利用可能な時間フォーマットセットに自動的に登録される。

実例.

クラスのコードは新しいFormatクラスのキー要素を説明する. jd フォーマット(これは最小のフォーマットのうちの1つ):

class TimeJD(TimeFormat):
    """
    Julian Date time format.
    """
    name = 'jd'  # Unique format name

    def set_jds(self, val1, val2):
        """
        Set the internal jd1 and jd2 values from the input val1, val2.
        The input values are expected to conform to this format, as
        validated by self._check_val_type(val1, val2) during __init__.
        """
        self._check_scale(self._scale)  # Validate scale.
        self.jd1, self.jd2 = day_frac(val1, val2)

    @property
    def value(self):
        """
        Return format ``value`` property from internal jd1, jd2
        """
        return self.jd1 + self.jd2

以上のように、 _check_val_type(self, val1, val2) 方法は、入力がフォーマット仕様に適合しているかどうかを検証する。デフォルトの場合、これは、有効な浮動小数点配列、浮動小数点配列、または Quantity 投入する。逆に、 iso Formatクラスは、入力がISO文字列フォーマット仕様に適合することを保証します。

比較的一般的で実装が容易な1つの特別な場合は、日付フォーマットを小さく変更するフォーマットである。例えば挿入することができます T はい。 yday 以下のフォーマットを使用してフォーマットを設定する TimeYearDayTimeCustom 級友たち。注意してください。 subfmts 定義は標準に基づいて少し修正する TimeISO それが継承されているクラス:

>>> from astropy.time import TimeISO
>>> class TimeYearDayTimeCustom(TimeISO):
...    """
...    Year, day-of-year and time as "<YYYY>-<DOY>T<HH>:<MM>:<SS.sss...>".
...    The day-of-year (DOY) goes from 001 to 365 (366 in leap years).
...    For example, 2000-001T00:00:00.000 is midnight on January 1, 2000.
...    The allowed subformats are:
...    - 'date_hms': date + hours, mins, secs (and optional fractional secs)
...    - 'date_hm': date + hours, mins
...    - 'date': date
...    """
...    name = 'yday_custom'  # Unique format name
...    subfmts = (('date_hms',
...                '%Y-%jT%H:%M:%S',
...                '{year:d}-{yday:03d}T{hour:02d}:{min:02d}:{sec:02d}'),
...               ('date_hm',
...                '%Y-%jT%H:%M',
...                '{year:d}-{yday:03d}T{hour:02d}:{min:02d}'),
...               ('date',
...                '%Y-%j',
...                '{year:d}-{yday:03d}'))


>>> t = Time('2000-01-01')
>>> t.yday_custom
'2000-001T00:00:00.000'
>>> t2 = Time('2016-001T00:00:00')
>>> t2.iso
'2016-01-01 00:00:00.000'

別の比較的一般的な特別な場合は、特定の紀元からの時間を表すフォーマットである。典型的な例はUnix Timeであり,1970-01-01 00:00:00 UTC以来の秒数であり,うるう秒は含まれていない.もし私たちがその価値を望むなら do うるう秒を数えたいのですが。これは,UTCスケールではなくTAIスケールを用いることで実現される.この例では私たちは TimeFromEpoch クラスといくつかのクラス属性を定義します:

>>> from astropy.time.formats import erfa, TimeFromEpoch
>>> class TimeUnixLeap(TimeFromEpoch):
...    """
...    Seconds from 1970-01-01 00:00:00 TAI.  Similar to Unix time
...    but this includes leap seconds.
...    """
...    name = 'unix_leap'
...    unit = 1.0 / erfa.DAYSEC  # in days (1 day == 86400 seconds)
...    epoch_val = '1970-01-01 00:00:00'
...    epoch_val2 = None
...    epoch_scale = 'tai'  # Scale for epoch_val class attribute
...    epoch_format = 'iso'  # Format for epoch_val class attribute

>>> t = Time('2000-01-01')
>>> t.unix_leap
946684832.0
>>> t.unix_leap - t.unix
32.0

これを超えるには見る必要があるかもしれません astropy コードはより多くの指示を得ていますがもし困難に直面したら astropy 開発者は喜んでお手伝いします。もしあなたが作成したフォーマットクラスが非常に有用なら、私たちはそれを核心に含めることを望むかもしれない!

時間帯.

一人になる Time 対象はタイムゾーンをサポートしております datetime タイムゾーン情報は保存されていません Time 相手。しかし、 Time オブジェクトはタイムゾーン感知のDateTimeオブジェクトに変換できる.

例を引く

そうしなければならない. Time オブジェクトは、タイムゾーンをサポートするDateTimeオブジェクトとして設定されています:

>>> from datetime import datetime
>>> from astropy.time import Time, TimezoneInfo
>>> import astropy.units as u
>>> utc_plus_one_hour = TimezoneInfo(utc_offset=1*u.hour)
>>> dt_aware = datetime(2000, 1, 1, 0, 0, 0, tzinfo=utc_plus_one_hour)
>>> t = Time(dt_aware)  # Loses timezone info, converts to UTC
>>> print(t)            # will return UTC
1999-12-31 23:00:00
>>> print(t.to_datetime(timezone=utc_plus_one_hour)) # to timezone-aware datetime
2000-01-01 00:00:00+01:00

タイムゾーンデータベースパッケージ、例えば pytz 例えばこれを使って tzinfo 時間帯を指定するためのオブジェクトではなく、 TimezoneInfo 物体です。

例を引く

使用 dateutil カバンの中で、様々なサポートされているフォーマットの時間を解析して、生成することができます datetime.datetime オブジェクト、そして、そのオブジェクトを使用して初期化することができます Time 対象::

>>> from dateutil.parser import parse  
>>> dtime = parse('2020-10-29T08:20:46.950+1100')  
>>> Time(dtime)  
<Time object: scale='utc' format='datetime' value=2020-10-28 21:20:46.950000>

カスタム文字列フォーマット、使用 strftime そして strptime

♪the Time オブジェクトは、Python標準ライブラリで定義されたフォーマット仕様言語を使用して、出力文字列表現をサポートします。 time.strftime それがそうです。使用できる strftime 方法です。

実例.

属性取得出力文字列表現形式 strftime 方法:

>>> from astropy.time import Time
>>> t = Time('2018-01-01T10:12:58')
>>> t.strftime('%H:%M:%S %d %b %Y')
'10:12:58 01 Jan 2018'

逆に作成するには Time Python標準ライブラリを使用して解析できるカスタム日付文字列の time.strptime (上にリンクされている同じフォーマットの言語を使用)、ご利用ください strptime クラス方法::

>>> from astropy.time import Time
>>> t = Time.strptime('23:59:60 30 June 2015', '%H:%M:%S %d %B %Y')
>>> t
<Time object: scale='utc' format='isot' value=2015-06-30T23:59:60.000>

参照/API

Asterpy.Timeセット

機能

update_leap_seconds \([files] )

現在のERFA LEAP Secondテーブルが期限切れになった場合、それを更新してみてください。

クラス

Conf \()

の構成パラメータ astropy.table それがそうです。

OperandTypeError \(左,右[, op] )

ScaleValueError \

Time (val[, val2, format, scale, precision, ...] )

天文学の時間と日付を表示して操作する。

TimeBase \()

TimeとTimeDeltaがそれから継承する基本時間クラス.

TimeBesselianEpoch (val 1,val 2,Scale,...[, ...] )

50.0.0のように浮動小数点値で表されるベッセル紀元年

TimeBesselianEpochString (val 1,val 2,Scale,...)

“B 1950.0”のような文字列の値で表されるベッセル紀元年

TimeCxcSec (val 1,val 2,小数桁,精度,...)

チャンドラX線センター1998-01-01 00:00:00 TT秒

TimeDatetime (val 1,val 2,小数桁,精度,...)

日付をPython標準ライブラリとして表示します。 datetime 客体.

TimeDatetime64 (val 1,val 2,小数桁,精度,...)

TimeDecimalYear (val 1,val 2,Scale,...[, ...] )

時間は10進年であり,整数値は毎年初日の真夜中に対応する.

TimeDelta (val[, val2, format, scale, ...] )

2つの時間間の時間差を表す.

TimeDeltaDatetime (val 1,val 2,Scale,...[, ...] )

Datetime.timeDeltaにおける時間増加

TimeDeltaFormat (val 1,val 2,Scale,...[, ...] )

時間増分が表す基底クラス

TimeDeltaJD (val 1,val 2,小数桁,精度,...)

儒略日単位の時間増分(86400 SI秒)

TimeDeltaNumeric (val 1,val 2,Scale,...[, ...] )

TimeDeltaSec (val 1,val 2,小数桁,精度,...)

SI秒単位の時間増加

TimeEpochDate (val 1,val 2,小数桁,精度,...)

浮動小数点ベゼルと儒略紀元日付をサポートする基本クラス

TimeEpochDateString (val 1,val 2,Scale,...)

基底クラスは、それぞれ‘B 1950.0’または‘J 2000.0’のような文字列BesselianとJulian紀元日付をサポートします。

TimeFITS (val 1,val 2,小数桁,精度,...)

フォーマットに適している:“ [±Y] YYYYY-MM-DD [Thh:mm:ss[.sss]] “”“。

TimeFormat (val 1,val 2,小数桁,精度,...)

時間が表す基底類。

TimeFromEpoch (val 1,val 2,小数桁,精度,...)

時間の基本クラスは、これらの時間は、特定の紀元からの間隔を単位時間間隔の浮動小数点倍数(例えば、単位時間間隔の浮動小数点倍数)として表す。

TimeGPS (val 1,val 2,小数桁,精度,...[, ...] )

全地球測位システム時間:世界調整時1980-01-06 00:00:00例えば、630720013.0は、2000年1月1日の真夜中である。

TimeISO (val 1,val 2,小数桁,精度,...[, ...] )

ISO 8601の日時フォーマット“YYYY-MM-DD HH:MM:SS.sss...”に準拠しています。

TimeISOT (val 1,val 2,小数桁,精度,...)

ISO 8601の日時フォーマット“YYYY-MM-DDTHH:MM:SS.sss...”に準拠する。

TimeInfo \([bound] )

名前、記述、フォーマットなどのメタ情報のコンテナ。

TimeJD (val 1,val 2,小数桁,精度,...[, ...] )

ジュリアン日時形式です。

TimeJulianEpoch (val 1,val 2,Scale,...[, ...] )

浮動小数点値で表される儒略紀元年は,たとえば200.0.0である.

TimeJulianEpochString (val 1,val 2,Scale,...)

文字列の値で表される儒略紀元年は、“J 2000.0”のように

TimeMJD (val 1,val 2,小数桁,精度,...[, ...] )

ジュリアン日時形式を修正しました。

TimeNumeric (val 1,val 2,小数桁,精度,...)

TimePlotDate (val 1,val 2,小数桁,精度,...)

Matplotlib plot_date 入力:1+世界協調時0001-01-01 00:00:00の日数

TimeString (val 1,val 2,小数桁,精度,...)

文字列形式の時間で表される基底クラス.

TimeUnique (val 1,val 2,小数桁,精度,...)

時間フォーマットの基本クラスは、明示的なフォーマット説明子を必要とせずに時間オブジェクトを一意に作成することができる。

TimeUnix (val 1,val 2,小数桁,精度,...)

UNIX時間(UTC):1970-01-01 00:00:00 UTCからの秒は,うるう秒を無視する.

TimeUnixTai (val 1,val 2,小数桁,精度,...)

UNIX時間(TAI):1970-01-01 00:00 TAIから経過したSI秒(警告参照).

TimeYMDHMS (val 1,val 2,小数桁,精度,...)

Ymdhms:時間を年、月、日、時間、分、秒として表す時間フォーマット(したがって、ymdhmsと呼ばれる)。

TimeYearDayTime (val 1,val 2,Scale,...[, ...] )

年、日付、時間、例えば“YYYY:DOY:HH:MM:SS.sss...”

TimezoneInfo \([utc_offset, dst, tzname] )

類の子類 tzinfo オブジェクトは,to_datetimeメソッドでタイムゾーンを指定するために用いられる.

クラス継承関係図

Inheritance diagram of astropy.time.Conf, astropy.time.core.OperandTypeError, astropy.time.core.ScaleValueError, astropy.time.core.Time, astropy.time.core.TimeBase, astropy.time.formats.TimeBesselianEpoch, astropy.time.formats.TimeBesselianEpochString, astropy.time.formats.TimeCxcSec, astropy.time.formats.TimeDatetime, astropy.time.formats.TimeDatetime64, astropy.time.formats.TimeDecimalYear, astropy.time.core.TimeDelta, astropy.time.formats.TimeDeltaDatetime, astropy.time.formats.TimeDeltaFormat, astropy.time.formats.TimeDeltaJD, astropy.time.formats.TimeDeltaNumeric, astropy.time.formats.TimeDeltaSec, astropy.time.formats.TimeEpochDate, astropy.time.formats.TimeEpochDateString, astropy.time.formats.TimeFITS, astropy.time.formats.TimeFormat, astropy.time.formats.TimeFromEpoch, astropy.time.formats.TimeGPS, astropy.time.formats.TimeISO, astropy.time.formats.TimeISOT, astropy.time.core.TimeInfo, astropy.time.formats.TimeJD, astropy.time.formats.TimeJulianEpoch, astropy.time.formats.TimeJulianEpochString, astropy.time.formats.TimeMJD, astropy.time.formats.TimeNumeric, astropy.time.formats.TimePlotDate, astropy.time.formats.TimeString, astropy.time.formats.TimeUnique, astropy.time.formats.TimeUnix, astropy.time.formats.TimeUnixTai, astropy.time.formats.TimeYMDHMS, astropy.time.formats.TimeYearDayTime, astropy.time.formats.TimezoneInfo

確認と許可

このバッグは利用する PyERFA の包装紙 ERFA ANSI Cライブラリです。当サイトの著作権 ERFA ソフトウェアはNumFOCUS財団に属しています。このライブラリは“BSD-3条項”ライセンスの条項の下で提供される。

♪the ERFA 図書館は国際天文学連合会の“基礎天文学基準”の許可を得て発展したものです。 (SOFA) ライブラリは、http://www.iosofa.orgから得ることができる。