Pythonでdate
をdatetime
に変換するための組み込みメソッドはありますか、例えば、与えられた日付の真夜中にdatetime
を取得するなどですか?逆の変換は簡単です:datetime
は.date()
メソッドを持ちます。
手動でdatetime(d.year, d.month, d.day)
を呼び出す必要がありますか?
datetime.combine (日付、時刻)を使用できます。当分の間、真夜中に初期化されたdatetime.time
オブジェクトを作成します。
from datetime import date
from datetime import datetime
d = date.today()
datetime.combine(d, datetime.min.time())
私があなたが言及した(そして嫌いな)ものが最も読みやすいものであると私は信じていますが、いくつかの方法があります。
>>> 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に戻すことにかかっています。
受け入れられた答えは正しいですが、私は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,
)
それが私の見解です。「明示的は暗黙的より優れています」。
date.timetuple()
メソッドを使用して、演算子*
を展開することができます。
args = d.timetuple()[:6]
datetime.datetime(*args)
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()
特にタイムゾーンを扱う場合、タイムスタンプは日時よりはるかに強力です。実際には、タイムスタンプは非常に強力であるため、残念ながら文書化されていません。
まだ言及されていない日付から日付時刻に変換する1つの方法:
from datetime import date, datetime
d = date.today()
datetime.strptime(d.strftime('%Y%m%d'), '%Y%m%d')
簡単にするために easy_date を使うことができます。
import date_converter
my_datetime = date_converter.date_to_datetime(my_date)
to_datetime()
は推奨されなくなりました。現在はto_pydatetime()
と呼ばれています。
パンダを使って一連の日付を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()