あいつの日誌β

働きながら旅しています。

python で date を datetime に変換する

やり方はいろいろあるけれどもとりあえず conbime するやり方を試みた

>>> import datetime
>>> current_date = datetime.date(2014, 12, 3)
>>> current_datetime = datetime.datetime.combine(
...     current_date,
...     datetime.time()
... )
>>> print(current_datetime)
2014-12-03 00:00:00

けれども timezone の指定で以下のように怒られてしまう

>>> import pytz
>>> current_datetime.astimezone(pytz.timezone('Asia/Tokyo'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: astimezone() cannot be applied to a naive datetime

こうすればよいみたい

>>> current_datetime = datetime.datetime.combine(
...     current_date,
...     datetime.time().replace(tzinfo=pytz.utc)
... )
>>> current_datetime.astimezone(pytz.timezone('Asia/Tokyo'))
datetime.datetime(2014, 12, 3, 9, 0, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>)

まとめると以下

import pytz
import datetime

current_date = datetime.date(2014, 12, 3)

current_datetime = datetime.datetime.combine(
    current_date,
    datetime.time().replace(tzinfo=pytz.utc)
)

current_datetime.astimezone(pytz.timezone('Asia/Tokyo'))

ちなみに time() はこういう感じになっています。

>>> datetime.time()
datetime.time(0, 0)
>>> print datetime.time()
00:00:00
>>> datetime.time().replace(tzinfo=pytz.utc)
datetime.time(0, 0, tzinfo=<UTC>)
>>> print datetime.time().replace(tzinfo=pytz.utc)
00:00:00+00:00