簡體   English   中英

Python-根據今天開始在一周的第一天,最后一天了解TimeZone

[英]Python - Get TimeZone aware First, Last day of the week based on today

我想根據用戶當前時區獲得每周的第一天,最后一天。 我正在嘗試解決,但我找不到在python。解決這里前進的方法,這里我以兩個diff時區為例。

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/kolkata ,從Oct 01 (Sunday)開始,到Oct 01 (Sunday) Oct 07 (Saturday) ,這是怎么回事?

擴展代碼:

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)

我正在擴展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]中:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM