Pythonで日付に5日を追加する


366

日付が"10/10/11(m-d-y)"あり、Pythonスクリプトを使用してそれに5日を追加したいと思います。月末にも機能する一般的な解決策を検討してください。

私は次のコードを使用しています:

import re
from datetime import datetime

StartDate = "10/10/11"

Date = datetime.strptime(StartDate, "%m/%d/%y")

print Date ->印刷中 '2011-10-10 00:00:00'

次に、この日付に5日を追加します。私は次のコードを使用しました:

EndDate = Date.today()+timedelta(days=10)

このエラーを返したもの:

name 'timedelta' is not defined

12
一般的な手がかり:エラーが発生した場合name 'timedelta' is not defined、それはtimedeltaどこにも定義されていないことを意味します。Pythonは通常、そのエラーメッセージについてかなり有益です。
カトリエル

1
検索が機能しませんでしたか?これらのコード例のすべてが役に立ちました:stackoverflow.com/search?q=python+timedelta。このような質問が200以上あるようです。
S.Lott、2009


9
5日を追加したいのに、timedelta(days = 10)があるとします。10がどこから来たのか、なぜ5でないのか混乱しています
FeifanZ

回答:


556

上記の答えは正しいですが、一般的には次のようにすることをお勧めします。

import datetime

次に、以下を使用しdatetime.timedeltaます:

date_1 = datetime.datetime.strptime(start_date, "%m/%d/%y")

end_date = date_1 + datetime.timedelta(days=10)

7
datetime.datetime-なぜ2回ですか?
paulmorriss 2014

59
「from datetime import datetime、timedelta」のようにインポートすると、コードが読みやすくなります
Manel Clos

8
@paulmorriss:モジュールstrptimedatetimeクラスのメソッドを呼び出しているdatetimeため、を指定する必要がありますdatetime.datetime
Graeme Perrow、2015年

6
一般的に使用されるクラスに、それを含むモジュールと同じ名前を付けるのはばかげた考えであるということに全員が同意できるでしょうか。なにdatetime?慣習に頼ることはできませんが、常にインポートを確認する必要があります。
Xiong Chiamiov 2017年

8
ロングテールのレガシー問題があります。from datetime import DateTimeクラスはCamelCasedであるため、「すべき」ですが、datetimeはPEP8に先行します。
アーロンマクミリン2017年

120

最初にインポートtimedeltadateます。

from datetime import timedelta, date

そしてdate.today()、あなたが望むかもしれない、今日の日時を返します

EndDate = date.today() + timedelta(days=10)

11
Date.today()ではなくdatetime.date.today()
elsadek

2
@ dan-klassonそれは私にとっては機能しません、dateオブジェクトにはtimedeltaメソッドがありません。どのPythonバージョンを使用していますか?
DrTyrsa 2017

@DrTyrsa悪い。する必要があります:from datetime import timedelta, date; date.today() + timedelta(days=10)
ダン・klasson

21

既にpandasを使用している場合は、形式を指定しないことで、少しスペースを節約できます。

import pandas as pd
startdate = "10/10/2011"
enddate = pd.to_datetime(startdate) + pd.DateOffset(days=5)

私にとってはうまくいきました。おかげで
レニー

12

私はあなたがそのような何かを見逃していると思います:

from datetime import timedelta

12

次に、dateutilのrelativedeltaを使用して日付に日付を追加する別の方法を示します。

from datetime import datetime
from dateutil.relativedelta import relativedelta

print 'Today: ',datetime.now().strftime('%d/%m/%Y %H:%M:%S') 
date_after_month = datetime.now()+ relativedelta(days=5)
print 'After 5 Days:', date_after_month.strftime('%d/%m/%Y %H:%M:%S')

出力:

今日:25/06/2015 15:56:09

5日後:2015年6月30日15:56:09


10

日付を今すぐ追加したい場合は、このコードを使用できます

from datetime import datetime
from datetime import timedelta


date_now_more_5_days = (datetime.now() + timedelta(days=5) ).strftime('%Y-%m-%d')

9

これから取得する機能+指定日数

import datetime

def get_date(dateFormat="%d-%m-%Y", addDays=0):

    timeNow = datetime.datetime.now()
    if (addDays!=0):
        anotherTime = timeNow + datetime.timedelta(days=addDays)
    else:
        anotherTime = timeNow

    return anotherTime.strftime(dateFormat)

使用法:

addDays = 3 #days
output_format = '%d-%m-%Y'
output = get_date(output_format, addDays)
print output

1
良いコード。しかし、get_dateでaddDaysをテストするためのIFは必要ありません
Eduardo

6

持って持つためにコード冗長少なく、かつ回避の名前の競合 日時とdatetime.datetimeの間を、あなたがクラスの名前を変更する必要があるキャメルケースの名前。

from datetime import datetime as DateTime, timedelta as TimeDelta

したがって、次のことができます。

date_1 = DateTime.today() 
end_date = date_1 + TimeDelta(days=10)

また、後で行う場合でも名前の競合はありませんimport datetime


0

使用してtimedelta、あなたが行うことができます秒:

import datetime
today=datetime.date.today()


time=datetime.time()
print("today :",today)

# One day different .
five_day=datetime.timedelta(days=5)
print("one day :",five_day)
#output - 1 day , 00:00:00


# five day extend .
fitfthday=today+five_day
print("fitfthday",fitfthday)


# five day extend .
fitfthday=today+five_day
print("fitfthday",fitfthday)
#output - 
today : 2019-05-29
one day : 5 days, 0:00:00
fitfthday 2019-06-03

0

一般的に、あなたは今答えを手に入れましたが、多分私が作成した私のクラスも役に立ちます。私にとっては、Pyhonプロジェクトでこれまでに経験したすべての要件を解決します。

class GetDate:
    def __init__(self, date, format="%Y-%m-%d"):
        self.tz = pytz.timezone("Europe/Warsaw")

        if isinstance(date, str):
            date = datetime.strptime(date, format)

        self.date = date.astimezone(self.tz)

    def time_delta_days(self, days):
        return self.date + timedelta(days=days)

    def time_delta_hours(self, hours):
        return self.date + timedelta(hours=hours)

    def time_delta_seconds(self, seconds):
        return self.date + timedelta(seconds=seconds)

    def get_minimum_time(self):
        return datetime.combine(self.date, time.min).astimezone(self.tz)

    def get_maximum_time(self):
        return datetime.combine(self.date, time.max).astimezone(self.tz)

    def get_month_first_day(self):
        return datetime(self.date.year, self.date.month, 1).astimezone(self.tz)

    def current(self):
        return self.date

    def get_month_last_day(self):
        lastDay = calendar.monthrange(self.date.year, self.date.month)[1]
        date = datetime(self.date.year, self.date.month, lastDay)
        return datetime.combine(date, time.max).astimezone(self.tz)

それの使い方

  1. self.tz = pytz.timezone("Europe/Warsaw") -ここで、プロジェクトで使用するタイムゾーンを定義します
  2. GetDate("2019-08-08").current()-これにより、文字列の日付がpt 1で定義したタイムゾーンで時間認識オブジェクトに変換されます。デフォルトの文字列形式はformat="%Y-%m-%d"自由に変更できます。(例GetDate("2019-08-08 08:45", format="%Y-%m-%d %H:%M").current()
  3. GetDate("2019-08-08").get_month_first_day() 指定された日付(文字列またはオブジェクト)の月の初日を返します
  4. GetDate("2019-08-08").get_month_last_day() 指定された日付の月の最終日を返します
  5. GetDate("2019-08-08").minimum_time() 指定された日付の開始日を返します
  6. GetDate("2019-08-08").maximum_time() 与えられた日付の日の終わりを返します
  7. GetDate("2019-08-08").time_delta_days({number_of_days})指定された日付を返し、{日数}を追加します(次のように呼び出すこともできます:GetDate(timezone.now()).time_delta_days(-1)昨日)
  8. GetDate("2019-08-08").time_delta_haours({number_of_hours}) pt 7に似ていますが、何時間も取り組んでいます
  9. GetDate("2019-08-08").time_delta_seconds({number_of_seconds}) pt 7に似ていますが、秒単位で動作します

0

時々、日付と日付による検索を使用する必要があります。date__rangeを使用する場合は、to_dateで1日を追加する必要があります。そうしないと、クエリセットが空になります。

例:

日時インポートからの時間差

from_date = parse_date(request.POST ['from_date'])

to_date = parse_date(request.POST ['to_date'])+ timedelta(days = 1)

出席リスト= models.DailyAttendance.objects.filter(attdate__range = [from_date、to_date])

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.