6

我有一个应用程序,我需要测量一年中的周数,并且我希望所有周都有 7 天,无论这些天是否在不同的年份。

例如,我希望从 2012 年 12 月 30 日到 2013 年 1 月 5 日的所有日子都在同一周。

但这在python 中并不直接,因为正如datetime文档所述:

%U  Week number of the year (Sunday as the first day of the week) 
as a decimal number [00,53]. All days in a new year preceding the 
first Sunday are considered to be in week 0.

我不希望将“第一个星期日之前的新年中的所有日子”视为第 0 周。第 0 周的天数少于 7 天,2012 年的最后一周也是如此。

因此 Python 返回:

 import datetime 
 datetime.date(2012, 12, 31).strftime('%Y-%U')
 >>> 2012-53

 import datetime 
 datetime.date(2013, 01, 01).strftime('%Y-%U')
 >>> 2013-00

即使这两天是星期一和星期二,也应该是在同一周,当一周被认为是从星期日开始并在星期六结束时。

相反,我想要反映 MySQL 在模式 2 中所做的功能(此处yearweek的文档)。

例如,

 mysql> select yearweek('2013-01-01', 2) as week;
 +--------+                                      
 | week   |                                      
 +--------+                                      
 | 201253 |                                      
 +--------+                                      
 1 row in set (0.64 sec)                         

请注意,即使日期是 2013 年,周也被认为是 201253,保证 2012 年的最后一周为 7 天。

这已经在 Python 中实现了吗?

以下日历供参考:

   December 2012     
Mo Tu We Th Fr Sa Su 
                1  2 
 3  4  5  6  7  8  9 
10 11 12 13 14 15 16 
17 18 19 20 21 22 23 
24 25 26 27 28 29 30 
31                   

     January 2013     
Mo Tu We Th Fr Sa Su 
    1  2  3  4  5  6 
 7  8  9 10 11 12 13 
14 15 16 17 18 19 20 
21 22 23 24 25 26 27 
28 29 30 31          
4

3 回答 3

1

isoweek模块提供了您需要的一切。

从文档中:

from isoweek import Week
w = Week(2011, 20)
print "Week %s starts on %s" % (w, w.monday())

print "Current week number is", Week.thisweek().week
print "Next week is", Week.thisweek() + 1

http://pypi.python.org/pypi/isoweek/1.1.0

于 2013-01-11T06:47:52.900 回答
1

我没有找到本地的方法来做到这一点,所以我只是写了一些非常简单的代码来测试一周是否是第零周,这意味着日期在当年但在第一个完整的开始日期之前当年的一周,等价的日期是在上一年的最后一周。

def get_week(date):                                             
    date = datetime.datetime.strptime(date, '%Y-%m-%d')              
    week = date.strftime('%Y%U')     

    if week[-2:] == '00':                                       
        year = week[:-2]                                        
        prev_year = int(year) - 1                                    
        week = datetime.date(prev_year, 12, 31).strftime('%Y%U')
    else:                                                            
        pass                                                         

    return week                                                 
于 2013-01-14T01:47:50.607 回答
-3

我想问一下为什么你需要有自己的周处理逻辑。根本原因是什么?

回到问题。如何通过您自己的代码处理逻辑: yu = datetime.date(2013,1,1).strftime("%Y-%U").split("-") if(int(yu[1]) = = 0): 周 = (datetime.date(2012,12,31).strftime("%Y-%U").split('-'))[1]

于 2013-01-11T06:51:13.777 回答