Created
December 13, 2022 03:18
-
-
Save knzm/307959def8c83335efe3cea82a7d7660 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import datetime | |
def get_last_sunday(dt: datetime.datetime) -> datetime.datetime: | |
""" | |
ある時刻が与えられたとき、その時刻を前回の日曜の15時に変換する | |
>>> get_last_sunday(datetime.datetime(2022, 12, 13, 2, tzinfo=datetime.timezone.utc)) | |
datetime.datetime(2022, 12, 11, 15, 0, tzinfo=datetime.timezone.utc) | |
>>> get_last_sunday(datetime.datetime(2022, 12, 18, 14, 0, tzinfo=datetime.timezone.utc)) | |
datetime.datetime(2022, 12, 11, 15, 0, tzinfo=datetime.timezone.utc) | |
>>> get_last_sunday(datetime.datetime(2022, 12, 18, 17, 0, tzinfo=datetime.timezone.utc)) | |
datetime.datetime(2022, 12, 18, 15, 0, tzinfo=datetime.timezone.utc) | |
""" | |
# dt より前の 15:00 | |
if dt.time() < datetime.time(15, 0): | |
dt = dt - datetime.timedelta(days=1) | |
dt = datetime.datetime(*dt.timetuple()[:3], 15, 0, tzinfo=datetime.timezone.utc) | |
# dt より前の日曜日 | |
dt = dt - datetime.timedelta(days=(dt.weekday() + 1) % 7) | |
return dt | |
if __name__ == '__main__': | |
import doctest | |
doctest.testmod() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment