60

datetimeDjangoのデータベースのフィールドに100年を減算または加算するにはどうすればよいですか?

日付はデータベースにあります。計算して挿入するためにフィールドを取得せずに、フィールドを直接更新したいだけです。

4

6 に答える 6

104

relativedeltaパッケージの機能を使用するdateutil.relativedeltaと、より正確な「n年前」の計算が可能になります。

from dateutil.relativedelta import relativedelta
import datetime

years_ago = datetime.datetime.now() - relativedelta(years=5)

date次に、他の人がここに示したように、フィールドを更新するだけです。

于 2011-05-03T15:28:34.603 に答える
13

timedeltaを使用します。このような何かがうまくいくはずです:

import datetime
years = 100
days_per_year = 365.24
hundred_years_later = my_object.date + datetime.timedelta(days=(years*days_per_year))
于 2011-05-03T14:53:47.950 に答える
6

Django クエリ セットの.update()メソッドを使用すると、データベースからオブジェクトを取得せずにすべての値を更新できます。F()オブジェクトを使用して既存の値を参照できます。

残念ながら、Python の timedelta は年では機能しないため、100 年を日で表す必要があります (36524.25 です)。

MyModel.objects.update(timestamp=F('timestamp')+timedelta(days=36524.25))
于 2011-05-03T15:22:52.847 に答える
1

私はそれが古い質問であることを知っていますが、私の問題を解決するための良い質問を見つけるのに問題がありました.

import datetime # Don't forget to import it

def subadd_date(date,years):
    ''' Subtract or add Years to a specific date by pre add  + or - '''
    if isinstance(date,datetime.datetime) and isinstance(years,int):
        day,month,year = date.day , date.month , date.year
        #If you want to have HOUR, MINUTE, SECOND 
        #With TIME: 
        # day,month,year,hour,minute,second = date.day, date.month,date.year,date.hour,date.minute,date.second  

        py = year + years # The Past / Futur Year
        new_date_str = "%s-%s-%s" % (day,month,py) # New Complete Date
        # With TIME : new_date_str = "%s-%s-%s %s:%s:%s" % (month,day,py,hour,minute,second)
        try:
            new_date = datetime.datetime.strptime(new_date_str,"%d-%m-%Y")
        except ValueError: # day is out of range for month (February 29th)
            new_date_str = "%s-%s-%s" % (1,month+1,py) # New Complete Date : March 1st
            new_date = datetime.datetime.strptime(new_date_str,"%d-%m-%Y")

        return new_date
        # With TIME : return datetime.datetime.strptime(new_date_str,"%d-%m-%Y %H:%M:%Y")
    return None
于 2017-12-13T14:35:40.413 に答える