web-dev-qa-db-ja.com

Pythonで日付を日付時刻に変換する

Pythonでdatedatetimeに変換するための組み込みメソッドはありますか、例えば、与えられた日付の真夜中にdatetimeを取得するなどですか?逆の変換は簡単です:datetime.date()メソッドを持ちます。

手動でdatetime(d.year, d.month, d.day)を呼び出す必要がありますか?

529
EMP

datetime.combine (日付、時刻)を使用できます。当分の間、真夜中に初期化されたdatetime.timeオブジェクトを作成します。

from datetime import date
from datetime import datetime
d = date.today()
datetime.combine(d, datetime.min.time())
662
kiamlaluno

私があなたが言及した(そして嫌いな)ものが最も読みやすいものであると私は信じていますが、いくつかの方法があります。

>>> t=datetime.date.today()
>>> datetime.datetime.fromordinal(t.toordinal())
datetime.datetime(2009, 12, 20, 0, 0)
>>> datetime.datetime(t.year, t.month, t.day)
datetime.datetime(2009, 12, 20, 0, 0)
>>> datetime.datetime(*t.timetuple()[:-4])
datetime.datetime(2009, 12, 20, 0, 0)

など - 基本的にそれらはすべてdateオブジェクトから適切に情報を抽出し、それをdatetimeの適切なctorまたはclassfunctionに戻すことにかかっています。

103
Alex Martelli

受け入れられた答えは正しいですが、私はdatetime.min.time()を使用することを避けることを望みます。それがあなたにとって明白なら、それからあなたにもっと力を。私はtimetupleメソッドと順序付けへの依存についても同じように感じます。

私の意見では、datetimeモジュールAPIに精通していることを読者に頼ることなくこれを行う最も読みやすく明示的な方法は次のとおりです。

from datetime import date, datetime
today = date.today()
today_with_time = datetime(
    year=today.year, 
    month=today.month,
    day=today.day,
)

それが私の見解です。「明示的は暗黙的より優れています」。

57
Wes Winham

date.timetuple()メソッドを使用して、演算子*を展開することができます。

args = d.timetuple()[:6]
datetime.datetime(*args)
40
teepark

2016年の今日、私は最もきれいな解決策がパンダタイムスタンプによって提供されると思います:

from datetime import date
import pandas as pd
d = date.today()
pd.Timestamp(d)

タイムスタンプはdatetimeと同等のパンダであり、ほとんどの場合それと交換可能です。チェック:

from datetime import datetime
isinstance(pd.Timestamp(d), datetime)

あなたが本当にバニラの日時を知りたい場合でも、あなたはまだやることができます:

pd.Timestamp(d).to_datetime()

特にタイムゾーンを扱う場合、タイムスタンプは日時よりはるかに強力です。実際には、タイムスタンプは非常に強力であるため、残念ながら文書化されていません。

6
kadee

まだ言及されていない日付から日付時刻に変換する1つの方法:

from datetime import date, datetime
d = date.today()
datetime.strptime(d.strftime('%Y%m%d'), '%Y%m%d')
4
kadee

簡単にするために easy_date を使うことができます。

import date_converter
my_datetime = date_converter.date_to_datetime(my_date)
3
Raphael Amoedo

to_datetime()は推奨されなくなりました。現在はto_pydatetime()と呼ばれています。

0
Oleg O

パンダを使って一連の日付をPythonのdatetimeに変換する:

dates = pd.DataFrame(
    {'date': pd.DatetimeIndex(start='2017-01-01', end='2017-01-5', freq='D')})
>>> dates
        date
0 2017-01-01
1 2017-01-02
2 2017-01-03
3 2017-01-04
4 2017-01-05

>>> pd.DatetimeIndex(dates['date']).to_pydatetime().tolist()
[datetime.datetime(2017, 1, 1, 0, 0),
 datetime.datetime(2017, 1, 2, 0, 0),
 datetime.datetime(2017, 1, 3, 0, 0),
 datetime.datetime(2017, 1, 4, 0, 0),
 datetime.datetime(2017, 1, 5, 0, 0)]

最初に日付を変換する必要があるかもしれません:

dates = pd.DataFrame(
        {'date': ['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04', '2017-01-05']})
dates['date'] = pd.DatetimeIndex(dates['date'])
pd.DatetimeIndex(dates['date']).to_pydatetime().tolist()
0
Alexander