1

我正在使用 dateparser 解析字符串并返回一个日期值以与提取日期进行比较,然后返回一个整数值作为两者之间的差异。在某些情况下,解析的日期是一个范围,在这种情况下,我对范围的两端进行平均,并得到平均值和提取日期之间的差异。

当月份进入明年时,我无法将年份替换为 2021 年,所以我的差异都是负面的。 如何用 2021 代替年份?

示例输出:

extraction date:  10/26/2020 0:00;   promo_message: ["Arrives: Feb 26 - March 2"] ;                   first_delivery:   -243  ;     last_delivery:  -238   ;   delivery:   -240

代码:

            elif 'Arrives' in row[6] and '-' in row[6]:
                try:
                    example_2 = promo_message.split('-',1)
                    first_delivery = (parse(example_2[0], fuzzy=True))
                    if first_delivery.month == 1:
                        first_delivery = first_delivery.replace(month=1, year=2021, tzinfo=None)
                    elif first_delivery.month == 2:
                        first_delivery = first_delivery.replace(month=2, year=2021, tzinfo=None)
                    elif first_delivery.month == 3:
                        first_delivery = first_delivery.replace(month=3, year=2021, tzinfo=None)
                    first_delivery = (parse(example_2[0], fuzzy=True))
                    first_delivery_int = (first_delivery - extraction_date).days

                    second_delivery = (parse(example_2[1], fuzzy=True))
                    if second_delivery.month == 1:
                        second_delivery = second_delivery.replace(month=1, year=2021)
                    elif second_delivery.month == 2:
                        second_delivery = second_delivery.replace(month=2, year=2021)
                    elif second_delivery.month == 3:
                        second_delivery = second_delivery.replace(month=3, year=2021)


                    second_delivery = (parse(example_2[1], fuzzy=True))
                    second_delivery_int = (second_delivery - extraction_date).days
4

2 回答 2

0

你为什么要进行某种形式的陪审团操纵的日期操纵?如果您以您知道的某种格式获取日期,则解析它并创建日期时间对象。一旦有了日期时间对象,就可以根据其中的方法进行日期操作了。

于 2020-11-03T16:19:22.667 回答
0

使用replace(year=2021)是正确的想法,但如果您使用 extract_date 更改年份可能会更容易。然后你可以做这样的事情:

from dateutil.parser import parse

def average_diff(extraction_date, promo_msg):
    split_date = promo_msg.split("-", 1)
    first_delivery = parse(split_date[0], fuzzy=True)
    second_delivery = parse(split_date[1], fuzzy=True)

    # Check for year rollover
    if first_delivery < extraction_date:
        first_delivery = first_delivery.replace(year=extraction_date.year + 1)
        second_delivery = second_delivery.replace(year=extraction_date.year + 1)

    diff1 = (first_delivery - extraction_date).days
    diff2 = (second_delivery - extraction_date).days
    
    # Deal with integer days, so use integer division
    return (diff1 + diff2) // 2

这里有一个关键假设,extraction_date它也是一个datetime对象(不是date对象)。如果它也是dateutil.parser'parse函数的结果,那么你应该没问题。现在,此代码不依赖于所讨论的年份、月份甚至日期。

于 2020-11-03T16:49:46.757 回答