Program Tip

Python으로 월요일 날짜 찾기

programtip 2020. 12. 13. 10:26
반응형

Python으로 월요일 날짜 찾기


Python을 사용하여 현재 날짜를 기반으로 이전 월요일 날짜를 어떻게 찾습니까? 나는 datetime.weekday()그것을 사용할 수 있다고 생각 했지만, 갇혀있다.

기본적으로 오늘 날짜와 월요일 날짜를 찾아 django에서 다음을 사용하여 날짜 범위 쿼리를 구성하고 싶습니다 created__range=(start_date, end_date).


>>> import datetime
>>> today = datetime.date.today()
>>> today + datetime.timedelta(days=-today.weekday(), weeks=1)
datetime.date(2009, 10, 26)

설명의 몇 마디 :

오늘 날짜를 취하십시오. 이번 주에 이미 지난 일 수를 뺍니다 (이렇게하면 '마지막'월요일이됩니다). 일주일을 추가하십시오.

편집 : 위의 내용은 '다음 월요일'용이지만 '지난 월요일'을 찾고 있었으므로 사용할 수 있습니다.

today - datetime.timedelta(days=today.weekday())

ChristopheD의 게시물은 귀하가 원하는 것에 가깝습니다. 댓글을 달 수있는 담당자가 충분하지 않습니다.

대신 (실제로 다음 월요일을 제공합니다) :

>>> 오늘 + datetime.timedelta (days = -today.weekday (), weeks = 1)
datetime.date (2009, 10, 26)

내가 말할 것:

>>> last_monday = 오늘-datetime.timedelta (days = today.weekday ())

이전 주를 원하면 'weeks = 1'매개 변수를 추가하십시오.

이것은 타임 델타를 빼기 때문에 코드를 더 읽기 쉽게 만듭니다. 이렇게하면 음수 및 양수 오프셋이있는 타임 델타를 추가하여 발생하는 혼동이 사라집니다.


가장 쉬운 방법은 다음과 같이 python-dateutil을 사용하는 것입니다 .

from datetime import date
from dateutil.relativedelta import relativedelta, MO

today = date.today()
last_monday = today + relativedelta(weekday=MO(-1))
print last_monday

참고 : OP는 댓글에 " 지난 월요일을 찾고있었습니다 "라고 말합니다 . 이것은 우리가 오늘 이전에 발생한 마지막 월요일을 찾고 있다는 것을 의미합니다.

datetime모듈 만 사용하여 계산을 올바르게 수행하기가 약간 어렵습니다 (특히 위의 "지난 월요일"해석을 고려하고 투박함을 피하려는 경우 if-statements). 예를 today들어이 월요일 이면 2013-12-23,

today - DT.timedelta(days=today.weekday())

(지난 월요일이 아님) 2013-12-23과 같은 날인을 반환합니다 today.

dateutil 모듈 사용의 장점은 까다로운 정신 계산을 수행하거나 독자가 올바른 날짜를 얻기 위해 동일한 작업을 수행하도록 할 필요가 없다는 것입니다. dateutil당신을 위해 모든 것을 :

import dateutil.relativedelta as rdelta
import datetime as DT

today = DT.date(2013, 12, 23)  # Monday

past_monday = today + rdelta.relativedelta(days=-1, weekday=rdelta.MO(-1))
print(past_monday)
# 2013-12-16

next_monday = today + rdelta.relativedelta(days=1, weekday=rdelta.MO(+1))
print(next_monday)
# 2013-12-30

참고 days=-1보증에 필요한 past_monday아닌 다른 날입니다 today.


timedeltas 및 datetime 모듈 사용 :

import datetime
datetime.date.today()+datetime.timedelta(days=-datetime.date.today().weekday())

Natty 를 사용할 수 있습니다 . parsedatetimedateparser 시도 했습니다 . 이 세 가지를 비교해 보면 Natty 가 최고 라고 생각 합니다.

결과를 얻으려면 다음과 같이 사용하십시오.

>>> from natty import DateParser
>>> dp = DateParser('last monday')
>>> dp.result()
[datetime.datetime(2016, 8, 1, 17, 35, 5, tzinfo=tzlocal())] #Today is 9th of August 2016 5.35 PM

Github 링크 : https://github.com/eadmundo/python-natty

시도해보세요. 더 많은 것을 할 수 있습니다!


"가장 최근 월요일"이 아닌 "가장 최근 일요일"을 얻는 방법을 찾고있는이 페이지에 표시되는 미래의 Google 사용자를 위해 datetime.weekday ()가 월요일을 첫 번째 날로 취급하기 때문에 몇 가지 추가 계산을 수행해야합니다. 금주의:

today = datetime.date.today()
weekday = today.weekday() + 1
start_day = today - datetime.timedelta(days=weekday % 7)

오늘이 화요일이면 start_day지난 일요일로 설정 됩니다. 오늘은 일요일이 세트 인 경우 start_day오늘 . 원정 가져 % 7일요일 현재의 경우 일주일 전에로 당신이 원하는 경우에 "마지막 일요일을".


d = datetime.datetime.today().weekday()

gives you today's day of the week, counting 0 (monday) to 6 (sunday)

datetime.datetime.today() + datetime.timedelta(days=(7-d)%7)

(7-d)%7 gives you days until Monday, or leaves you where you are if today is Monday

참고URL : https://stackoverflow.com/questions/1622038/find-mondays-date-with-python

반응형