使用python-dateutil
rrule
模块得到了意外的结果,我想知道这是否是WAI。
我正在使用以下方法动态创建rrule
:
dtstart = datetime.date(2019, 1, 7)
until = datetime.date(2029, 11, 29)
freq = MONTHLY
byweekday=MO(2)
interval = 4
这导致以下规则
DTSTART:20190107T000000
RRULE:FREQ=MONTHLY;INTERVAL=4;UNTIL=20291129T000000;BYDAY=+2MO
但是,当生成日期时(在此python模块的规则中循环),我得到以下日期:
[datetime.datetime(2019, 1, 14, 0, 0),
datetime.datetime(2019, 5, 13, 0, 0),
datetime.datetime(2019, 9, 9, 0, 0),
datetime.datetime(2020, 1, 13, 0, 0),
datetime.datetime(2020, 5, 11, 0, 0),
datetime.datetime(2020, 9, 14, 0, 0),
datetime.datetime(2021, 1, 11, 0, 0),
datetime.datetime(2021, 5, 10, 0, 0),
datetime.datetime(2021, 9, 13, 0, 0),
datetime.datetime(2022, 1, 10, 0, 0),
datetime.datetime(2022, 5, 9, 0, 0),
datetime.datetime(2022, 9, 12, 0, 0),
datetime.datetime(2023, 1, 9, 0, 0),
datetime.datetime(2023, 5, 8, 0, 0),
datetime.datetime(2023, 9, 11, 0, 0),
datetime.datetime(2024, 1, 8, 0, 0),
datetime.datetime(2024, 5, 13, 0, 0),
datetime.datetime(2024, 9, 9, 0, 0),
datetime.datetime(2025, 1, 13, 0, 0),
datetime.datetime(2025, 5, 12, 0, 0),
datetime.datetime(2025, 9, 8, 0, 0),
datetime.datetime(2026, 1, 12, 0, 0),
datetime.datetime(2026, 5, 11, 0, 0),
datetime.datetime(2026, 9, 14, 0, 0),
datetime.datetime(2027, 1, 11, 0, 0),
datetime.datetime(2027, 5, 10, 0, 0),
datetime.datetime(2027, 9, 13, 0, 0),
datetime.datetime(2028, 1, 10, 0, 0),
datetime.datetime(2028, 5, 8, 0, 0),
datetime.datetime(2028, 9, 11, 0, 0),
datetime.datetime(2029, 1, 8, 0, 0),
datetime.datetime(2029, 5, 14, 0, 0),
datetime.datetime(2029, 9, 10, 0, 0)]
请注意,第一个日期偏移了一周!为什么会这样呢?这是库中的错误吗?
谢谢, 大卫
答案 0 :(得分:0)
这不是库中的错误。 2019-01-14
是符合您的规则的第一个日期(这是2019年1月的第二个星期一)。显然python-dateutil选择不包含您提供的开始日期,这完全合法。
RRULE
在RFC 5545中指定,在Section 3.8.5.3中(在“描述”下)指出:
使用“ DTSTART”属性生成的重复设置 与重复规则不同步的值是不确定的。
从本质上讲,这意味着没有正确或错误的解释,因为如果开始日期与规则不匹配,则输入数据将被“破坏”。
请注意,许多其他实现可能会同时返回您的开始日期2019-01-07
和结果2019-01-14
。我认为任何实现都不会省略2019-01-14
,仅仅是因为它是第一个与规则匹配的日期。在结果中是否应该包含开始日期2019-01-07
还是有争议的,但是肯定应该在其中包含2019-01-14
。
答案 1 :(得分:0)
在 Python 中 by_weekly 代码可以这样实现。
path = os.path.join(raw_folder, folder, file)
print('[DEBUG] path:', path)
img = cv2.imread(path)
if img is None:
print('Wrong path:', path)
else:
img = cv2.resize(img, dsize=(128,128))
pixels.append(img)