Python使用if语句检查时间戳工作不正常

Python使用if语句检查时间戳工作不正常,python,if-statement,Python,If Statement,我有这些应该检查时间戳的if语句。最后一个if语句似乎不起作用。这些时间戳值应该显示检索到的时间戳大于当前值-两个月,但这不会发生。使用以下值运行时,将触发最后一个if语句 应要求: 订单日期2018-12-17T16:58:00-06:00 价值观: one month 2592000 two months 5184000 current timestamp 1545247709.1553745 retrieved timestamp 1545026400 current - two mont

我有这些应该检查时间戳的
if
语句。最后一个
if
语句似乎不起作用。这些时间戳值应该显示检索到的时间戳大于当前值-两个月,但这不会发生。使用以下值运行时,将触发最后一个
if
语句

应要求: 订单日期2018-12-17T16:58:00-06:00 价值观:

one month 2592000
two months 5184000
current timestamp 1545247709.1553745
retrieved timestamp 1545026400
current - two months 1540063709.1553745


one month 259200 <class 'int'>
two months 5184000 <class 'int'>
current timestamp 1545252986.085405 <class 'float'>
retrieved timestamp 1545026400 <class 'int'>



   if order_count > 1:
    for result in results['orders']:
        order_status_info= self_api.which_api('order_statuses/%d' % result['order_status_id'])
        for customer_blocked_reason in customer_blocked_reasons:
            if customer_blocked_reason in order_status_info['name']:
                customer_is_blocked = True


   order_id                 = 0
        order_date          = result['ordered_at']
        two_month_seconds   = (3600 * 24) * 60
        one_month_seconds   = (3600 * 24) * 30
        stripped_date       = order_date[:order_date.find("T")]
        current_timestamp   = time.time()
        retrieved_timestamp = int(datetime.datetime.strptime(stripped_date, '%Y-%m-%d').strftime("%s"))
        print("one month", one_month_seconds)
        print("two months", two_month_seconds)
        print("current timestamp", current_timestamp)
        print("retrieved timestamp", retrieved_timestamp)
        print("current - two months", current_timestamp - two_month_seconds)

        if retrieved_timestamp > (current_timestamp - one_month_seconds) and not customer_is_blocked:
            status['success'] = 1
            status['message'] = "Customer Verified with orders older than 30 days and no blocking reasons"
            break

        elif customer_is_blocked:
            status_change_result = self_order.update_status(order_statuses['order_hold_manager_review'])
            status['success']    = 1
            status['message']    = "Changed order status to Order Hold - Manager Review"
            break

        elif retrieved_timestamp < (current_timestamp - two_month_seconds):
            status['success'] = 0
            status['message'] = "There is more than 1 order, and none are greater than 60 days, we need to check manually"
1个月2592000
两个月5184000
当前时间戳1545247709.1553745
检索到的时间戳1545026400
当前-两个月1540063709.1553745
一个月259200
两个月5184000
当前时间戳1545252986.085405
检索到的时间戳1545026400
如果订单数量>1:
对于结果[“订单”]:
订单状态信息=self\u api。哪个api('order\u status/%d'%result['order\u status\u id'))
对于“客户锁定原因”中的“客户锁定原因”:
如果订单状态信息['name']中的客户\u被阻止\u原因:
客户被阻止=真
订单号=0
订单日期=结果['ordered\u at']
两个月秒=(3600*24)*60
一个月十秒=(3600*24)*30
剥离日期=订单日期[:订单日期.查找(“T”)]
当前时间戳=time.time()
检索到的\u timestamp=int(datetime.datetime.strtime(剥离的\u日期,%Y-%m-%d')。strftime(“%s”))
打印(“一个月”,一个月,秒)
打印(“两个月”,两个月,两秒)
打印(“当前时间戳”,当前时间戳)
打印(“检索到的时间戳”,检索到的时间戳)
打印(“当前-两个月”,当前时间戳-两个月/秒)
如果检索到的\u时间戳>(当前\u时间戳-一个月\u秒)而不是客户\u被\u阻止:
状态['success']=1
状态['message']=“已验证订单超过30天且无阻塞原因的客户”
打破
如果客户被阻止:
状态\更改\结果=自我\订单。更新\状态(订单状态['order\ U hold\ U manager\ U review')
状态['success']=1
状态['message']=“订单状态更改为订单保留-经理审核”
打破
elif检索到的\u时间戳<(当前\u时间戳-两个月\u秒):
状态['success']=0
状态['message']=“订单超过1个,且没有一个订单超过60天,我们需要手动检查”

不应将“break”语句置于循环之外。但通常情况下,口译员会理解这一点。所以必须有更多的代码参与,也许问题就在那里。我复制了这里的逻辑,并将给定的值分配给变量,如果customer_is_blocked==False,我得到第一个选项,如果customer_is_blocked==False,则得到第二个选项

two_month_seconds   = (3600 * 24) * 60
one_month_seconds   = (3600 * 24) * 30
current_timestamp   = 1545247709.1553745
retrieved_timestamp = 1545026400
customer_is_blocked = True

if retrieved_timestamp > (current_timestamp - one_month_seconds) and not customer_is_blocked:
    print(1)
elif customer_is_blocked:
    print(2)
elif retrieved_timestamp < (current_timestamp - two_month_seconds):
    print(3)
2个月秒=(3600*24)*60
一个月十秒=(3600*24)*30
当前时间戳=1545247709.1553745
检索到的时间戳=1545026400
客户被阻止=真
如果检索到的\u时间戳>(当前\u时间戳-一个月\u秒)而不是客户\u被\u阻止:
印刷品(1)
如果客户被阻止:
印刷品(2)
elif检索到的\u时间戳<(当前\u时间戳-两个月\u秒):
印刷品(3)

您是否将'False'或'False'(字符串)分配给客户\u被阻止而不是False?

我刚刚测试了您的代码,在手动分配给每个变量后,这似乎起到了作用。除了将strftime(“%s”)替换为
timestamp()
之外,我没有更改任何内容,因为我收到一个错误:
ValueError:无效的格式字符串

导入日期时间
导入时间
订单号=0
#手动分配此
订单日期=“2018-12-17T16:58:00-06:00”
客户被阻止=错误
两个月秒=(3600*24)*60
一个月十秒=(3600*24)*30
剥离日期=订单日期[:订单日期.查找(“T”)]
当前时间戳=time.time()
#这是我做的唯一更改:strftime(“%s”)=>timestamp()
检索到的\u timestamp=int(datetime.datetime.strtime(剥离的\u日期,“%Y-%m-%d”).timestamp())
打印(“一个月”,一个月,秒)
打印(“两个月”,两个月,两秒)
打印(“当前时间戳”,当前时间戳)
打印(“检索到的时间戳”,检索到的时间戳)
打印(“当前-两个月”,当前时间戳-两个月/秒)
如果检索到的\u时间戳>(当前\u时间戳-一个月\u秒)而不是客户\u被\u阻止:
印刷品(1)
如果客户被阻止:
印刷品(2)
elif检索到的\u时间戳<(当前\u时间戳-两个月\u秒):
印刷品(3)
使用您提供的
order\u date
值,如果
customer\u被阻止==False
,上述代码将打印
1
,如果
customer\u被阻止==True
,则打印
2


让我知道这是否对你有用

你检查过你的数据类型了吗?当前时间戳-一个月-秒作为数据类型返回什么?只是尝试了一下结果是:当前-一个月1542658409.0589633我尝试过将当前值转换为整数,但没有改变任何东西。不,不是那个值,data type.ok的返回值是浮动的,但是我刚刚尝试将当前的\u时间戳转换为整数,所以现在它的返回值是整数,并且仍然没有差异。请为这些值输入有效的Python。在我看来,你是在比较一个字符串和一个int…我刚刚试过,在if语句中添加了print 1,2,3。当我使用我提供的值运行代码时,它会打印1。但该订单不超过30天,因此不应打印一份。也许我混淆了逻辑。我们正在查看是否有分别超过30天和60天的订单。在订单日期设置为不符合第一个要求的情况下,在我发布的代码中,您是否希望如果订单超过30天且客户未被阻止,则应打印1???但是,如果超过60天,应该打印3???@Anon_guy,如果我的答案是