web-dev-qa-db-ja.com

Python-日時文字列から時間を削除

日付文字列があり、それを日付型に変換したい:

私が望む形式でdatetime.datetime.strptimeを使用しようとしましたが、変換で時間を返しています。

    when = alldates[int(daypos[0])]
    print when, type(when)

    then = datetime.datetime.strptime(when, '%Y-%m-%d')
    print then, type(then)

これは出力が返すものです:

   2013-05-07 <type 'str'>
   2013-05-07 00:00:00 <type 'datetime.datetime'>

時間を削除する必要があります:00:00:00。

29
pythonhunter
print then.date()

必要なのはdatetime.dateオブジェクトです。持っているのはdatetime.datetimeオブジェクトです。上記のように印刷するときにオブジェクトを変更するか、オブジェクトを作成するときに次の操作を実行できます。

then = datetime.datetime.strptime(when, '%Y-%m-%d').date()
50
Woody Pride
>>> print then.date(), type(then.date())
2013-05-07 <type 'datetime.date'>

結果をタイムゾーンに対応させる必要がある場合は、datetimeオブジェクトのreplace()メソッドを使用できます。これによりタイムゾーンが保持されるため、次のことができます

>>> from Django.utils import timezone
>>> now = timezone.now()
>>> now
datetime.datetime(2018, 8, 30, 14, 15, 43, 726252, tzinfo=<UTC>)
>>> now.replace(hour=0, minute=0, second=0, microsecond=0)
datetime.datetime(2018, 8, 30, 0, 0, tzinfo=<UTC>)

これはnew datetimeオブジェクトを返すことに注意してください-nowは変更されません。

2
ukrutt

文字列を日付に変換するための最も簡単な方法は、dateutilモジュールです。

import dateutil.parser
datetime_object = dateutil.parser.parse("2013-05-07")

タイムゾーンも処理できます。

print(dateutil.parser.parse("2013-05-07"))
>>> datetime.datetime(2013, 5, 7, 1, 12, 12, tzinfo=tzutc())

日時オブジェクトがある場合、次のように言います。

import pytz
import datetime
now = datetime.datetime.now(pytz.UTC)

時間部分を切り捨てたい場合は、「時間部分を差し引く」よりも新しいオブジェクトを作成する方が簡単だと思います。それはより短く、より防弾です:

date_part datetime.datetime(now.year, now.month, now.day, tzinfo=now.tzinfo)

また、タイムゾーン情報を保持し、timedelta減算よりも読みやすく理解しやすく、同じステップで別のタイムゾーンを指定するオプションもあります(とにかく時間部分がゼロになるため、これは理にかなっています) 。

1
nagylzs

私にとっては、UTCを使用していたので少し時間を要するため、timetimeオブジェクトを保持する必要がありました。だから、これは私がやったことです:

date = datetime.datetime.utcnow()

start_of_day = date - datetime.timedelta(
    hours=date.hour, 
    minutes=date.minute, 
    seconds=date.second, 
    microseconds=date.microsecond
)

end_of_day = start_of_day + datetime.timedelta(
    hours=23, 
    minutes=59, 
    seconds=59
)

出力例:

>>> date
datetime.datetime(2016, 10, 14, 17, 21, 5, 511600)
>>> start_of_day
datetime.datetime(2016, 10, 14, 0, 0)
>>> end_of_day
datetime.datetime(2016, 10, 14, 23, 59, 59)
0
Dovy