2017-10-06 50 views
1

我想根據用戶當前時區獲取一週的最後一天。我試圖解決,但我無法找到一種方式前進,以解決python.here我已採取兩個比較時區例如。Python - 獲取時區知道首先,基於今天的一週的最後一天

from datetime import datetime, date, timedelta 
from pytz import timezone 

tz1 = timezone('utc') 
tz2 = timezone('Asia/Kolkata') 
tz3 = timezone('America/Los_Angeles') 

dt1 = datetime.now(tz=tz1) 
dt2 = datetime.now(tz=tz2) 
dt3 = datetime.now(tz=tz3) 


start_of_week = dt1+timedelta(days=0-dt1.weekday()) 
end_of_week = dt1+timedelta(days=6-dt1.weekday()) 

print(start_of_week) 
print(end_of_week) 

start_of_week2 = dt2+timedelta(days=0-dt2.weekday()) 
end_of_week2 = dt2+timedelta(days=6-dt2.weekday()) 

print(start_of_week2) 
print(end_of_week2) 


start_of_week3 = dt3+timedelta(days=0-dt3.weekday()) 
end_of_week3 = dt3+timedelta(days=6-dt3.weekday()) 

print(start_of_week3) 
print(end_of_week3) 

輸出:

2017-10-02 09:21:32.666920+00:00 
2017-10-08 09:21:32.666920+00:00 
2017-10-02 14:51:32.666920+05:30 # not right 
2017-10-08 14:51:32.666920+05:30 # not right 
2017-10-02 02:21:32.666920-07:00 # not right 
2017-10-08 02:21:32.666920-07:00 # not right 

我住在Asia/kolkataOct 07 (Saturday)一週的Oct 01 (Sunday)周和結束的開始,這裏有什麼問題?

+0

那麼,什麼是你正在運行到這個問題?錯誤,結果不好? –

+0

Duplicate:https://stackoverflow.com/questions/19216334/python-give-start-and-end-of-week-data-from-a-given-date – chakri

+0

上面的代碼不會返回第一個,最後一週它只給出週數,但我正在尋找可能的解決方案python – Srinivas

回答

2

擴展代碼:

from datetime import datetime, date,timedelta 
from pytz import timezone 

tz1 = timezone('utc') 
tz2 = timezone('Asia/Kolkata') 
tz3 = timezone('America/Los_Angeles') 

dt1 = datetime.now(tz=tz1) 
dt2 = datetime.now(tz=tz2) 
print(dt1) 
print(dt2) 

start_of_week = dt1+timedelta(days=0-dt1.weekday()) 
end_of_week = dt1+timedelta(days=6-dt1.weekday()) 

print(start_of_week) 
print(end_of_week) 
+0

看起來不錯,但如何做它的功能和包裹的日期。 )+1 –

0

我擴大chakris答案:

更新一週以來要麼可以啓動或在同一天結束了,當你輸入週日和周啓動星期天你有兩個選擇。

也許你可以更改代碼以適合你的需求。

from datetime import datetime, date,timedelta 
from pytz import timezone 

def week_startandend(dt_,weekstart=0): 
    """Returns tuple with start date of week and end day of week.""" 
    index = (dt_.weekday() + (7-weekstart % 7)) % 7 

    # Calculate start and end 
    start = dt_+timedelta(days=0-index) 
    end = dt_+timedelta(days=6-index) 

    # if week doesnt start on the same day we can return 
    if index != 0: 
     return {"start":start.date(),"end":end.date()} 
    # else we need to calculate the other option 
    else: 
     start2 = dt_+timedelta(days=-7) 
     end2 = dt_ 
     return {"start1":start.date(),"end1":end.date(), 
       "start2":start2.date(),"end2":end2.date()} 

tz1 = timezone('utc') 
tz2 = timezone('Asia/Kolkata') 

dt1 = datetime.now(tz=tz1) 
dt2 = datetime.now(tz=tz2) 

print(week_startandend(dt1)) # defaults to 0 
print(week_startandend(dt2,weekstart=6)) # 6 = sunday 

返回

{'start': datetime.date(2017, 10, 2), 'end': datetime.date(2017, 10, 8)} 
{'start1': datetime.date(2017, 10, 8), 'end1': datetime.date(2017, 10, 14), 
'start2': datetime.date(2017, 10, 1), 'end2': datetime.date(2017, 10, 8)} 

在[352]:

+0

@Srinivas我認爲你複製了錯誤的代碼。該輸出是不可能的。 –

+0

對不起,我複製了@chakri答案。上面更新了我的問題。 – Srinivas

+0

@Srinivas好吧,現在你有真正的問題,這是你想要的?應該編輯爲一週的所有日子工作 –

相關問題