Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python计算日期_Python_Date_Calendar - Fatal编程技术网

用Python计算日期

用Python计算日期,python,date,calendar,Python,Date,Calendar,我试图用Python计算1950-2050年间每年第13个星期五的数量(我知道,有点晚了)。我不熟悉任何要使用的日期/日历包。有什么想法吗?这是某种练习还是家庭作业?我隐约记得我已经解决了它。我可以给你一个提示,我似乎用了当然也应该有其他方法来解决它。听起来像是家庭作业。提示(工作日4是星期五): datetime.date类有一个weekday()函数,它将一周中的某一天(从0开始索引)作为整数,因此星期五是4。还有isoweekday() 无论如何,一个简单的解决方案是: friday13

我试图用Python计算1950-2050年间每年第13个星期五的数量(我知道,有点晚了)。我不熟悉任何要使用的日期/日历包。有什么想法吗?

这是某种练习还是家庭作业?我隐约记得我已经解决了它。我可以给你一个提示,我似乎用了当然也应该有其他方法来解决它。

听起来像是家庭作业。提示(工作日4是星期五):


datetime.date类有一个
weekday()
函数,它将一周中的某一天(从0开始索引)作为整数,因此星期五是4。还有
isoweekday()

无论如何,一个简单的解决方案是:

friday13 = 0
months = range(1,13)
for year in xrange(1950, 2051):
    for month in months:
        if date(year, month, 13).weekday() == 4:
            friday13 += 1

这有一个直接的解决办法。使用sum计算每月13日为星期五的次数:

import datetime
print(datetime.datetime(1950,1,13).weekday())
>>> from datetime import datetime # the function datetime from module datetime
>>> sum(datetime(year, month, 13).weekday() == 4 
        for year in range(1950, 2051) for month in range(1,13))
174

虽然其他解决方案清晰简单,但下面的解决方案更“日历化”。您需要
dateutil
软件包,该软件包可作为软件包安装:

from datetime import datetime
from dateutil import rrule

fr13s = list(rrule.rrule(rrule.DAILY,
                         dtstart=datetime(1950,1,13),
                         until=datetime(2050,12,13),
                         bymonthday=[13],
                         byweekday=[rrule.FR]))
# this returns a list of 174 datetime objects

你可以看到
rrule.rrule
的这五个参数:在
dtstart
之间的每一个
rrule.day
(天)取
dtstart
直到
其中
bymonthday
是13,而
byweekday
rrule.FR
(星期五)。

试着不要做作业——只是出于好奇。我相信
月份=范围(0,13)
可以简化为
months=range(13)
@NolenRoyalty不是我的家庭作业,在我上大学的时候,我们身边有很多年长的学生,他们拿着薪水在身边帮忙。不过在射程上有一点不错。。。我通常出于习惯而非常明确,但这并不真正需要
0
。这不是你的家庭作业,而是相关的。而且我相信这实际上会抛出一个错误,你需要范围(1,13),因为月份必须至少是1…@NolenRoyalty:-P你在这个月的事情上是对的。应该从1开始。我已经在Python中看到了几个月的迭代错误。比如从3月1日往后跳一个月。好的,从技术上讲不是迭代,但我只是说,在几个月内依赖时间操纵是不可靠的,没有固定的定义组成“1个月”的时间段,因此在所有情况下都没有完全正确地实施。。。