Python проверяет временные метки, если операторы работают неправильно - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть эти 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"

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Я только что проверил ваш код, и, после назначения вручную каждой переменной, похоже, это работает.Я не изменил ничего, кроме замены strftime("%s") на timestamp(), потому что я получал ошибку: ValueError: Invalid format string.

import datetime
import time

order_id            = 0

# Manually assign this
order_date          = "2018-12-17T16:58:00-06:00"
customer_is_blocked = False

two_month_seconds   = (3600 * 24) * 60
one_month_seconds   = (3600 * 24) * 30
stripped_date       = order_date[:order_date.find("T")]
current_timestamp   = time.time()

# This is the only change I did: strftime("%s") => timestamp()
retrieved_timestamp = int(datetime.datetime.strptime(stripped_date, "%Y-%m-%d").timestamp())

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:
    print(1)
elif customer_is_blocked:
    print(2)
elif retrieved_timestamp < (current_timestamp - two_month_seconds):
    print(3)

Со значением order_date, которое вы указали, код выше печатает 1 если customer_is_blocked == False и 2 если customer_is_blocked == True.

Дайте мне знать, если это сработало для вас!

0 голосов
/ 19 декабря 2018

Операторы 'break' не должны быть вне цикла.Но обычно переводчик поймал бы это.Так что должно быть больше кода, может быть, проблема в этом.Я скопировал здесь логику и присвоил заданные значения переменным, и я получаю первый вариант, если customer_is_blocked == False, и второй вариант, если это 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)

Вы присвоили «False» или «false'(строка) в customer_is_blocked вместо False?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...