【问题标题】:Exception was: unsupported operand type(s) for -: 'str' and 'datetime.timedelta'例外是:不支持的操作数类型 -: 'str' 和 'datetime.timedelta'
【发布时间】:2012-01-12 01:20:22
【问题描述】:

我是 python 新手,我正在制作一个处理 request.GET 方法的系统...... 当我将日期传递给系统时,如果它存在,那么它将查找数据库并根据该日期和其他日期显示数据,否则它将显示一个带有其他日期的日期... 这是我的代码:

from django.utils.xmlutils import SimplerXMLGenerator
from piston.handler import BaseHandler
from booking.models import *
from django.db.models import *
from piston.utils import rc, require_mime, require_extended, validate
import datetime

class BookingHandler(BaseHandler):
    allowed_method = ('GET', 'POST', 'PUT', 'DELETE')
    fields = ('id', 'date_select', 'product_name', 'quantity', 'price','totalcost', 'first_name', 'last_name', 'contact', 'product')
    model = Booking
    #for product availability
    def read(self, request, id, date_select):
        if not self.has_model():
            return rc.NOT_IMPLEMENTED
        try:   
            prod = Product.objects.get(id=id)
            merge = []
            checkDateExist = Booking.objects.filter(date_select=date_select)
            if checkDateExist.exists():
                entered_date = Booking.objects.values('date_select').distinct('date_select').filter(date_select=date_select)[0]['date_select']
            else:             
                enteredTemp_date = datetime.datetime.strptime(date_select, '%Y-%m-%d')
                entered_date = datetime.datetime.strftime(enteredTemp_date,'%Y-%m-%d')


            delta = datetime.timedelta(days=3)
            target_date = entered_date - delta
            day = 1
            for x in range(0,5):
                delta = datetime.timedelta(days=x+day)
                new_date = target_date + delta
                maximumProdQuantity = prod.quantity
                quantityReserve = Booking.objects.filter(date_select=new_date, product=prod).aggregate(Sum('quantity'))['quantity__sum']
                if quantityReserve == None:
                    quantityReserve = 0

                data1 = {'maximum_guest': maximumProdQuantity, 'avialable': quantityReserve, 'date': new_date}
                merge.append(data1)    

            return merge       
        except self.model.DoesNotExist:
            return rc.NOT_HERE 

我得到了这个错误:

Piston/0.3dev (Django 1.3.1) crash report:

Method signature does not match.

Signature should be: id, date_select

Exception was: unsupported operand type(s) for -: 'str' and 'datetime.timedelta'

我认为在我的else 语句中entered_date 变成了一个字符串,我这样做entered_date = datetime.datetime.strftime(enteredTemp_date,'%Y-%m-%d') 这样日期格式就不是2011-12-01 00:00:00 我只需要2011-12-01。我的问题是我怎样才能得到2011-12-01 那是日期时间格式而不是字符串? 任何人都可以就我的情况给出提示或想法吗? 谢谢

【问题讨论】:

    标签: python django django-piston


    【解决方案1】:

    strftime 返回一个格式化的字符串。如果要丢弃datetime 对象的时间部分,请使用datetime.date

    entered_date = datetime.datetime.strptime(date_select, '%Y-%m-%d')
    entered_date = entered_date.date()
    

    【讨论】:

      【解决方案2】:
      #!/usr/bin/env python3
      # -*- coding: utf-8 -*-
      '''hi, your need to transfor the stirng to the date formation.
      use this :
      '''
      
      
      import datetime
      import time
      from datetime import timedelta
      
      today = datetime.date.today()
      print(today)
      
      
      # 0r 
      from datetime import date
      today1 = date.today()
      print(today1)
      
      
      tomorrow = today - datetime.timedelta(days=7)
      print(str(tomorrow))
      
      # it is ok, because the today is date formation
      
      
      #but the following it is not ok
      
      event_day= "2021-05-18"
      tomorrow = event_day - datetime.timedelta(days=7)
      
      # you should do this:
      text='2021-5-10'
      x=datetime.datetime.strptime(text, '%Y-%m-%d').date()
      
      print(x) # it's ok
      
      
      # hope this help you!
      

      【讨论】:

        猜你喜欢
        • 2022-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多