用于计算间隔的工具/库,例如"每月的最后一个星期四"

Ror*_*ory 2 python datetime date

我正在寻找一个命令行工具或某种python库(我可以将其包装),以便我可以计算指定的日期,如"每月的最后一个星期四".

即我想让人们像上面那样输入人类友好的文本,并且它应该能够计算任何月/年的任何日期/任何满足该条件的日期.

有什么建议?

And*_*lke 7

mxDateTime和Datejs以及webservice都不支持"本月的最后一个星期四".OP希望知道本月的最后一个星期四,比如一整年.

mxDateTime支持操作,但问题必须在Python代码中提出,而不是作为字符串.

我能想到的最好的是解析时间,但这并不支持"本月的最后一个星期四".它确实支持:

>>> c.parseDateText("last thursday of april 2001")
(2001, 4, 20, 13, 55, 58, 3, 64, 0)
>>> c.parseDateText("last thursday of may 2001")
(2001, 5, 20, 13, 56, 3, 3, 64, 0)
>>> c.parseDateText("last thursday of may 2010")
(2010, 5, 20, 13, 56, 7, 3, 64, 0)
>>> 
Run Code Online (Sandbox Code Playgroud)

(请注意,DateJS和该Web服务都不支持此语法.)

编辑:嗯,好吧,虽然年和月都是对的,但这一天不是.2001年4月的最后一个星期四是27日.我想你将不得不在这里推出自己的解决方案.

它不支持:

>>> c.parseDateText("last thursday of 2010")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "parsedatetime/parsedatetime.py", line 411, in parseDateText
    mth = self.ptc.MonthOffsets[mth]
KeyError
>>> 
Run Code Online (Sandbox Code Playgroud)

因此,一种可能性是文本替换:将字符串规范化为小写,单个空格等,然后对您感兴趣的每个月进行"月份"的字符串替换.您可能需要调整您找到的任何解决方案.例如,在他为在线音乐压延系统编写的一些旧的Skip Montanaro代码中:

     # someone keeps submitting dates with september spelled wrong...
     'septmber':9,
Run Code Online (Sandbox Code Playgroud)

或者您在mxDateTime之上编写自己的解析器,使用上述所有链接作为参考.