简体   繁体   English

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

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

I want to get first, last day of the week based on users current timezone. 我想根据用户当前时区获得每周的第一天,最后一天。 i am trying to solve but i could not find a way move forward to solve in python.here i have taken two diff timezones for example. 我正在尝试解决,但我找不到在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)

Output: 输出:

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

I live in Asia/kolkata and start of the week Oct 01 (Sunday) and end of the week Oct 07 (Saturday) , what is wrong here? 我住在Asia/kolkata ,从Oct 01 (Sunday)开始,到Oct 01 (Sunday) Oct 07 (Saturday) ,这是怎么回事?

Extending your code: 扩展代码:

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)

I'm expanding chakris answer: 我正在扩展chakris答案:

updated Since a week either can start or end on the same day, when you input sunday and the week start with sunday you have two options. 已更新由于一个星期可以在同一天开始或结束,因此当您输入星期天,并且星期从星期日开始时,您有两个选择。

Maybe you can change the code to fit your needs. 也许您可以更改代码以适合您的需求。

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

Returns 返回

{'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)}

In [352]: 在[352]中:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM