6

年の週数を測定する必要があるアプリケーションがあり、日が別の年にあるかどうかに関係なく、すべての週を 7 日にしたいと考えています。

たとえば、2012 年 12 月 30 日から 2013 年 1 月 5 日までのすべての日を同じ週にしたいとします。

datetimeしかし、ドキュメントがここに述べているように、これはPythonで行うのは簡単ではありません:

%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 週は、2012 年の最後の週と同様に 7 日未満になります。

したがって、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

これらの 2 日は月曜日と火曜日ですが、1 週間が日曜日に始まり、土曜日に終わると見なされる場合、同じ週にある必要があります。

代わりに、MySQL がyearweekモード 2 で行うことを反映した機能が必要です (ドキュメントはこちら)。

例えば、

 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

これを行うネイティブな方法が見つからなかったので、その週が第 0 週であるかどうかをテストするための非常に単純なコードを書きました。現在の年の週であり、同等に、日付は前年の最後の週にあります。

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 に答える
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 に答える
-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 に答える