Python:一个月的第三个星期五

Jua*_*lan 11 python datetime calendar date datetimeoffset

我是一个新手python程序员,我需要编写一个脚本来检查给定日期(以"月,日年"形式的字符串传递)是否是该月的第三个星期五.我使用的是Python 2.7.

例如,这些日期可以帮助您更好地理解我的问题.手头有年历.

  • 输入--->输出
  • '2013年1月18日'--->真的
  • '2013年2月22日'--->错误
  • '2013年6月21日'--->真的
  • '2013年9月20日'--->真的

我只想使用该语言提供的标准类,如时间,日期时间,日历等.

我已经查看了一些答案,但我看到每天的addidng /减少86400秒的计算,甚至根据一个月的天数进行比较.恕我直言这些是错误的,因为Python中的libreries已经处理了这些细节,所以没有必要重新发明轮子.日历和日期也很复杂:闰年,闰秒,时区,周数等等.所以我认为最好让图书馆解决这些棘手的细节.

在此先感谢您的帮助.

ely*_*ase 23

这应该这样做:

from datetime import datetime 

def is_third_friday(s):
    d = datetime.strptime(s, '%b %d, %Y')
    return d.weekday() == 4 and 15 <= d.day <= 21
Run Code Online (Sandbox Code Playgroud)

测试:

print is_third_friday('Jan 18, 2013')  # True
print is_third_friday('Feb 22, 2013')  # False
print is_third_friday('Jun 21, 2013')  # True
print is_third_friday('Sep 20, 2013')  # True
Run Code Online (Sandbox Code Playgroud)

  • @MichaelMolter前7天必须有星期五.所以第一个星期五是从1到7,这意味着(增加14)第三个星期五是从15到21. (4认同)
  • 一周的所有第三天都落在15-21范围内,一周的所有第二天都落在8-14之间,一周的所有第一天都落在1-7之间。我会改写成`15 &lt;= d.day &lt;= 21`,我认为它更直观。 (2认同)

Mor*_*ten 6

如果您想查找选项的到期时间,您可以使用类似的方法

from datetime import datetime
import calendar

def option_expiration(date):
    day = 21 - (calendar.weekday(date.year, date.month, 1) + 2) % 7
    return datetime(date.year, date.month, day)

print option_expiration(datetime.today())
Run Code Online (Sandbox Code Playgroud)