時間と日付 (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
それがそうです。
格式. |
クラス |
例示的なパラメータ |
---|---|---|
年.年 |
1950.0 |
|
byear_str |
'B1950.0' |
|
Cxcsec |
63072064.184 |
|
日時. |
DateTime(2000,1,2,12,0,0) |
|
10年. |
2000.45 |
|
コンビネーション |
‘2000-01-01 T 00:00:00.000’ |
|
全地球測位システム(GPS) |
630720013.0 |
|
国際標準化機構 |
‘2000-01-01 00:00:00.000’ |
|
Isot |
‘2000-01-01 T 00:00:00.000’ |
|
JD |
2451544.5 |
|
JYear |
2000.0 |
|
jyear_str |
'J2000.0' |
|
MJD |
51544.0 |
|
plot_date |
730120.0003703703 |
|
Unix |
946684800.0 |
|
unix_tai |
946684800.0 |
|
Yday |
2000年:0001:00:00:00.000 |
|
うん。うん。 |
{‘年“:2010,”月“:3,”日“:1} |
|
日時64 |
Np.datetime 64(‘2000-01-01 T 01:01:01’) |
注釈
♪the TimeFITS
FormatはFITS標準の多くを実現している 2, 対も含めて LOCAL
時間刻みです。ただし,FITSは使用を推奨しない時間スケール名をサポートしており,これらの名前は初期化時に正式名称に変換されることに注意されたい.さらに特定の実現情報は UT(NIST)
時間スケールが変わらない場合にのみ格納される.
書式を変更する¶
デフォルト表示形式は設定することで 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
, andyday
formats:
格式. |
子格式 |
入出力 |
---|---|---|
|
date_hms |
2001-01-02 03:04:05.678 |
|
date_hm |
2001-01-02 03:04 |
|
日取り |
2001-01-02 |
|
date_hms |
2001-01-02 T 03:04:05.678 |
|
longdate_hms |
+02001-01-02 T 03:04:05.678 |
|
ナツメが長い. |
+02001-01-02 |
|
date_hms |
2001年:032:03:04:05.678 |
|
date_hm |
2001:032:03:04 |
|
日取り |
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
これらのフォーマットは以下のとおりである.
格式. |
子格式 |
---|---|
|
浮動小数点型、長整型、10進、文字列、バイト |
|
浮動小数点型、長整型、10進、文字列、バイト |
|
DATE_HMS、DATE_HMM、DATE_HMS |
|
浮動小数点型、長整型、10進、文字列、バイト |
|
DATE_HMS,DATE,LONG DATE_HMS,LONG DATE |
|
浮動小数点型、長整型、10進、文字列、バイト |
|
DATE_HMS、DATE_HMM、DATE_HMS |
|
DATE_HMS、DATE_HMM、DATE_HMS |
|
浮動小数点型、長整型、10進、文字列、バイト |
|
浮動小数点型、長整型、10進、文字列、バイト |
|
浮動小数点型、長整型、10進、文字列、バイト |
|
浮動小数点型、長整型、10進、文字列、バイト |
|
浮動小数点型、長整型、10進、文字列、バイト |
|
浮動小数点型、長整型、10進、文字列、バイト |
|
DATE_HMS、DATE_HMM、DATE_HMS |
コントロールのサブフォーマットオプションの完全リスト TimeDelta
これらのフォーマットは以下のとおりである.
格式. |
子格式 |
---|---|
|
浮動小数点型、長整型、10進、文字列、バイト |
|
浮動小数点型、長整型、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.
格式. |
縮尺. |
参考日. |
---|---|---|
|
TT |
|
|
UTC |
|
|
TAI |
|
|
TAI |
|
デフォルトで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
注釈
♪the local
時間スケールとは,自由に動作するクロックやシミュレーション時間(すなわち,目盛りが正しく定義されていない時間を表す)である.これは、他の時間スケールに変換することができず、以下の場合にのみ算術演算を行うことができることを意味する Time
規模のある実例 local
…と一緒に TimeDelta
規模のある実例 local
あるいは…。 None
それがそうです。
サポートされる時間スケール間の変換システム(すなわち、除算 local
)を次の図に示す。詳細についてはご参照ください Convert time scale 一節です。
スカラーまたは配列¶
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>
注釈
将来のバージョンでは、天文台オブジェクトおよび/または名前を追加する可能性を増加させたい。
現在の時間を取得する¶
>>> 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
オブジェクトは,通常のものを使用することができる 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
フォーマットクラスと不足値をカスタマイズする¶
オブジェクトはカスタムタイムフォーマットを作成した上級ユーザ 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 部分と下図に時間スケール変換のネットワークを示す.
実例.¶
作成するには 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
それが呼び出されたり印刷されたりすると。表示する要素数をコントロールする場合は、 threshold
与 np.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
あるいはその絶対値をとる.掛けるか割るか
TimeDelta
定数または配列を通過する.
♪the TimeDelta
類派生自 Time
クラスは,その多くの属性を共有する.1つの違いは、時間スケールは1日ちょうど86400秒でなければならないということだ。したがって,縮尺はUTCではない.
利用可能な時間フォーマットは、:
格式. |
クラス |
---|---|
秒 |
|
JD |
|
日時. |
実例.¶
使用 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セット¶
機能¶
|
現在のERFA LEAP Secondテーブルが期限切れになった場合、それを更新してみてください。 |
クラス¶
|
の構成パラメータ |
|
|
|
天文学の時間と日付を表示して操作する。 |
|
TimeとTimeDeltaがそれから継承する基本時間クラス. |
|
50.0.0のように浮動小数点値で表されるベッセル紀元年 |
|
“B 1950.0”のような文字列の値で表されるベッセル紀元年 |
|
チャンドラX線センター1998-01-01 00:00:00 TT秒 |
|
日付をPython標準ライブラリとして表示します。 |
|
|
|
時間は10進年であり,整数値は毎年初日の真夜中に対応する. |
|
2つの時間間の時間差を表す. |
|
Datetime.timeDeltaにおける時間増加 |
|
時間増分が表す基底クラス |
|
儒略日単位の時間増分(86400 SI秒) |
|
|
|
SI秒単位の時間増加 |
|
浮動小数点ベゼルと儒略紀元日付をサポートする基本クラス |
|
基底クラスは、それぞれ‘B 1950.0’または‘J 2000.0’のような文字列BesselianとJulian紀元日付をサポートします。 |
|
フォーマットに適している:“ [±Y] YYYYY-MM-DD [Thh:mm:ss[.sss]] “”“。 |
|
時間が表す基底類。 |
|
時間の基本クラスは、これらの時間は、特定の紀元からの間隔を単位時間間隔の浮動小数点倍数(例えば、単位時間間隔の浮動小数点倍数)として表す。 |
|
全地球測位システム時間:世界調整時1980-01-06 00:00:00例えば、630720013.0は、2000年1月1日の真夜中である。 |
|
ISO 8601の日時フォーマット“YYYY-MM-DD HH:MM:SS.sss...”に準拠しています。 |
|
ISO 8601の日時フォーマット“YYYY-MM-DDTHH:MM:SS.sss...”に準拠する。 |
|
名前、記述、フォーマットなどのメタ情報のコンテナ。 |
|
ジュリアン日時形式です。 |
|
浮動小数点値で表される儒略紀元年は,たとえば200.0.0である. |
|
文字列の値で表される儒略紀元年は、“J 2000.0”のように |
|
ジュリアン日時形式を修正しました。 |
|
|
|
Matplotlib |
|
文字列形式の時間で表される基底クラス. |
|
時間フォーマットの基本クラスは、明示的なフォーマット説明子を必要とせずに時間オブジェクトを一意に作成することができる。 |
|
UNIX時間(UTC):1970-01-01 00:00:00 UTCからの秒は,うるう秒を無視する. |
|
UNIX時間(TAI):1970-01-01 00:00 TAIから経過したSI秒(警告参照). |
|
Ymdhms:時間を年、月、日、時間、分、秒として表す時間フォーマット(したがって、ymdhmsと呼ばれる)。 |
|
年、日付、時間、例えば“YYYY:DOY:HH:MM:SS.sss...” |
|
類の子類 |
クラス継承関係図¶
確認と許可¶
このバッグは利用する PyERFA の包装紙 ERFA ANSI Cライブラリです。当サイトの著作権 ERFA ソフトウェアはNumFOCUS財団に属しています。このライブラリは“BSD-3条項”ライセンスの条項の下で提供される。
♪the ERFA 図書館は国際天文学連合会の“基礎天文学基準”の許可を得て発展したものです。 (SOFA) ライブラリは、http://www.iosofa.orgから得ることができる。