题目描述: 给你一个日期的字符串s,s的格式为 ‘yyyy-mm-dd’(保证给定的日期合法), 请你输出该日期是该年份的第几天,第几周,用一个空格隔开这两个数字。 注意,天和周都从1开始计数。一周的开始是周日,结束是周六,例如2014-01-04是周六(这是2014年的第一周的最后一天),2014-01-05是周日(这是第二周的开始)。 例如: s = ‘2014-01-01’, 则输出:1 1 s = ‘2014-01-05’, 则输出:5 2
Note:感谢@hhbsng指出,python系统的时间库有bug,例如,对于1989,给出的周数有误。数据已更新,之前利用时间库直接解的代码无法再次通过本题 (2015/6/15)。
示例: 输入: s = “2014-01-01” 输出: 1 1
分析: python 系统时间库中 关于 某日期是某一年的第几周 的bug是:
如果 该年的第 1 天 是 (星期1 ~ 星期6) 查询返回 第 0 周,而如果是 星期7,则查询返回第 1 周。,实际上第 1 天不管是星期几都应该是第1周。
知道了这个 bug,就变得很简单了。
代码:
1
2
3
4
5
6
import time
t=time.strptime(s,'%Y-%m-%d')
if int(time.strftime('%U',time.strptime(s[:5]+'01-01','%Y-%m-%d')))==0:
print( int(time.strftime('%j',t)),int(time.strftime('%U',t))+1)
else:
print(int(time.strftime('%j',t)),int(time.strftime('%U',t)))