날짜에서 하루를 빼는 방법?


답변:


1291

timedelta 객체를 사용할 수 있습니다 .

from datetime import datetime, timedelta

d = datetime.today() - timedelta(days=days_to_subtract)

14
시간대를 무시하지 않으면 대답이 더 복잡 합니다.
jfs

또한 특정 날짜와 어떻게 관련이 있습니까? 내 질문보기 : stackoverflow.com/questions/43092508/…
JohnAndrews

7
파이썬 3에서 : import datetime 그리고 d = datetime.today ()-datetime.timedelta (days = days_to_subtract)
Alex

다른 장치에서도 작동합니다 timedelta(minutes=12). 예를 들어 사용했습니다 .
Nagev

@legalalien : import 문 : import datetime as DT; DT.datetime.today()파이썬 2와 3 모두에서 작동하는지 확인하십시오 DT.datetime.now().
jfs


62

Python datetime 객체가 시간대를 인식하는 경우 DST 전환 (또는 다른 이유로 UTC 오프셋의 변경)과 관련된 오류를 피해야합니다.

from datetime import datetime, timedelta
from tzlocal import get_localzone # pip install tzlocal

DAY = timedelta(1)
local_tz = get_localzone()   # get local timezone
now = datetime.now(local_tz) # get timezone-aware datetime object
day_ago = local_tz.normalize(now - DAY) # exactly 24 hours ago, time may differ
naive = now.replace(tzinfo=None) - DAY # same time
yesterday = local_tz.localize(naive, is_dst=None) # but elapsed hours may differ

일반적으로, day_ago그리고yesterday 로컬 시간대 마지막 날에 대해 변경된 경우 UTC 오프셋 다를 수있다.

예를 들어 일광 절약 시간 / 서머 타임은 미국 / Los_Angeles 시간대의 2014 년 2 월 11 일 오전 02:00:00에 종료됩니다.

import pytz # pip install pytz

local_tz = pytz.timezone('America/Los_Angeles')
now = local_tz.localize(datetime(2014, 11, 2, 10), is_dst=None)
# 2014-11-02 10:00:00 PST-0800

그때 day_agoyesterday다릅니다 :

  • day_ago정확히 24 시간 전 (에 상대적 now)이지만 오전 11시에 오전 10시에now
  • yesterday어제 오전 10시이지만 24 시간이 아니라 25 시간 전 (에 상대적 now)입니다.

pendulum모듈 이 자동으로 처리합니다.

>>> import pendulum  # $ pip install pendulum

>>> now = pendulum.create(2014, 11, 2, 10, tz='America/Los_Angeles')
>>> day_ago = now.subtract(hours=24)  # exactly 24 hours ago
>>> yesterday = now.subtract(days=1)  # yesterday at 10 am but it is 25 hours ago

>>> (now - day_ago).in_hours()
24
>>> (now - yesterday).in_hours()
25

>>> now
<Pendulum [2014-11-02T10:00:00-08:00]>
>>> day_ago
<Pendulum [2014-11-01T11:00:00-07:00]>
>>> yesterday
<Pendulum [2014-11-01T10:00:00-07:00]>

41

다른 방법 과 도움이되는 사용 사례 를 정교하게 하기 위해서 :

  • 현재 날짜 시간에서 1 일 빼기 :
from datetime import datetime, timedelta
print datetime.now() + timedelta(days=-1)  # Here, I am adding a negative timedelta
  • 5 일을 더하고 현재 날짜 시간에서 5 시간을 빼고 싶을 경우에 유용합니다 . 즉 지금부터 5 일이지만 5 시간이 더 적은 Datetime은 무엇입니까?
from datetime import datetime, timedelta
print datetime.now() + timedelta(days=5, hours=-5)

초, 주 등 다른 매개 변수와 유사하게 사용할 수 있습니다.


8

또한 지난달의 첫 번째 / 마지막 날 또는 다른 상대 타임 델타 등을 계산할 때 사용하고 싶은 또 다른 멋진 기능입니다 ...

dateutil 함수 의 상대 델타 함수 (datetime lib의 강력한 확장)

import datetime as dt
from dateutil.relativedelta import relativedelta
#get first and last day of this and last month)
today = dt.date.today()
first_day_this_month = dt.date(day=1, month=today.month, year=today.year)
last_day_last_month = first_day_this_month - relativedelta(days=1)
print (first_day_this_month, last_day_last_month)

>2015-03-01 2015-02-28

7

생식 화살표 모듈이 있습니다

import arrow
utc = arrow.utcnow()
utc_yesterday = utc.shift(days=-1)
print(utc, '\n', utc_yesterday)

산출:

2017-04-06T11:17:34.431397+00:00 
 2017-04-05T11:17:34.431397+00:00
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.