Skip to content

Instantly share code, notes, and snippets.

@knzm
Created December 13, 2022 03:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save knzm/307959def8c83335efe3cea82a7d7660 to your computer and use it in GitHub Desktop.
Save knzm/307959def8c83335efe3cea82a7d7660 to your computer and use it in GitHub Desktop.
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