web-dev-qa-db-ja.com

整数の日付形式をYYYYMMDDに変換する方法は?

PythonとMatlabは、多くの場合、次のように整数の日付表現を持っています。

733828.0 733829.0 733832.0 733833.0 733834.0 733835.0 733836.0 733839.0 733840.0 733841.0

これらの数字は、今年のいくつかの日付に対応しています。どの関数がYYYYMMDD形式に変換できるか知っていますか?

どうもありがとう!

15
James Bond

datetime.datetime class が役立ちます。これらの値が整数日として扱われる場合、以下は機能します(何であるかを指定しません)。

>>> from datetime import datetime
>>> dt = datetime.fromordinal(733828)
>>> dt
datetime.datetime(2010, 2, 25, 0, 0)
>>> dt.strftime('%Y%m%d')
'20100225'

値を浮動小数点数として表示し、上記は浮動小数点数を取りません。データが何であるか(およびそのデータの出所)についてより詳細に説明できる場合は、より完全な回答を提供することができます。

17
Peter Hansen

Pythonの例はすでに示されているので、MATLABの例を次に示します。

_>> datestr(733828, 'yyyymmdd')

ans =

20090224
_

また、これらは類似しているように見えますが、MatlabとPythonでは実際には異なるものであることに注意してください。

Matlab
シリアル日付番号は、特定の日時からの日数の全体および一部を表します。ここで、datenum('Jan-1-0000 00:00:00')は数値1を返します(年0000は単なる参照ポイントであり、意図されていません実際の年として解釈されます。)

Python、 _datetime.date.fromordinal_
1年目の1月1日が序数1である、発作的なグレゴリオ暦序数に対応する日付を返します。

したがって、それらは366日で異なります。これは明らかに0年の長さです。

15
SilentGhost

733828.0のような日付は、ラタダイの日付であり、西暦1年1月1日から数えられます(および小数日数)。それらはUTCまたはタイムゾーンによる場合があります。

ユリウス日は、主に天文学者が使用し、紀元前4713年1月1日のグリニッジ正午からの日数(および小数日数)をカウントします。ユリウス日は、通常の日付と混同されることがよくあります。これは、現在の年の1月1日からの日付カウントです(2月2日=序数33)。

したがって、datetimeはこれらのものを序数の日付と呼んでいますが、これはPythonの世界ではローカルでのみ意味があると思います。

5
Toby Fernsler

733828.0はタイムスタンプですか?その場合は、次の操作を実行できます。

import datetime as dt
dt.date.fromtimestamp(733828.0).strftime('%Y%m%d')

PS

ピーター・ハンセンは正しいと思います:)

私はネイティブスピーカーではありません。ただ助けようとしています。タイムスタンプと序数の違いがよくわかりません:(

4
satoru