Django의 데이터베이스에서 datetime
필드에 100 년을 빼거나 추가 할 수 있습니까? 어떻게 Django에서 데이터베이스의 datetime 필드에 100 년을 빼거나 추가 할 수 있습니까?
날짜
난 그냥 직접 계산 한 후 삽입 그것을 밖으로 검색하지 않고 필드를 업데이트 할 데이터베이스입니다.Django의 데이터베이스에서 datetime
필드에 100 년을 빼거나 추가 할 수 있습니까? 어떻게 Django에서 데이터베이스의 datetime 필드에 100 년을 빼거나 추가 할 수 있습니까?
날짜
난 그냥 직접 계산 한 후 삽입 그것을 밖으로 검색하지 않고 필드를 업데이트 할 데이터베이스입니다.데이터베이스에서 Django datetime
필드의 값을 얻으면 Python datetime
개체 형태로 제공됩니다.
from datetime import datetime
d = datetime_object_from_database
d_plus_100_years = datetime(d.year + 100, *d.timetuple()[1:-2])
그런 다음 다시 데이터베이스에 저장합니다
나는 파이썬 날짜 개체에 백년을 추가하는 가장 쉬운 방법은 다음과 같이 생각합니다. 하지만 코멘트에 언급 한 바와 같이 날짜가 400당신이 d.timetuple'전에 별을 데려 가고 싶다는 생각()'. 또한'd'가 2000 년 2 월 29 일이나 2400 년 2 월 29 일에 결코 없었 으면 좋겠다 :-) –
@Will : 당신은 두 가지 모두에있어 옳다. –
두 개의 쿼리를 발행하고 동시 액세스에 안전하지 않습니다. – peufeu
사용 timedelta의 배수의 1 년 윤년 일 경우,이 완전히 실패합니다. 이런 식으로 뭔가 트릭을 수행해야합니다
import datetime
years = 100
days_per_year = 365.24
hundred_years_later = my_object.date + datetime.timedelta(days=(years*days_per_year))
장고 쿼리 세트에 .update()
방법을 사용하여 데이터베이스에서 개체를 검색하지 않고 모든 값을 업데이트 할 수 있습니다. F()
object을 사용하여 기존 값을 참조 할 수 있습니다.
불행하게도 당신이 일에 표현 백년을 해결해야 할 것이다, 그래서 년 작동하지 않습니다 파이썬의 timedelta는 (그것의 36524.25) :
MyModel.objects.update(timestamp=F('timestamp')+timedelta(days=36524.25))
timedelta가있는 F() 객체를 참조하기 위해 Django 1.3 이상에서만 사용 가능합니다. –
와우. 1.3 이전에는 작동하지 않았다는 것을 알지 못했습니다. –
이것은, 윤년 일 2012-02-29처럼보다 효율적으로 사용하는'relativedate을 무시()'대신 timedelta'의()'당신은 내가 그'F()'객체 일 경우 매우 놀랄 것 정확성 – vdboor
내가 dateutil.relativedelta의 relativedelta 기능을 사용 당신이 계산 'N-년전'더 정확 줄 것이다 패키지 : 다른 사람이 여기에 표시된대로
from dateutil.relativedelta import relativedelta
import datetime
years_ago = datetime.datetime.now() - relativedelta(years=5)
그런 다음 단순히 날짜 필드를 업데이트합니다.
나는 그것이 오래된 질문 알고,하지만 난 내 문제를 해결하기 위해 좋은 일을 찾을 수있는 문제를 가지고는, 나는이 만든 : 사용 플러스 (+) 또는 마이너스 (-)로 처리하는 :
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
무엇을 의미합니까? 100 년 동안 데이터베이스의 모든 날짜를 수정 하시겠습니까? 날짜 + 100 년을 비교하는 쿼리를 작성 하시겠습니까? 100 년 추가 된 날짜를 출력하고 싶습니까? 뭐? –
쓰기 뭔가 queryset.update 같은 (END_TIME = END_TIME + 1) – kelvinfix