如何获取当天的所有datetime实例,给定一天? [英] How to get all datetime instances of the current week, given a day?

查看:259
本文介绍了如何获取当天的所有datetime实例,给定一天?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有一天,我希望得到一天中的所有日子(datetime实例)。



我有一个解决方案,请纠正我如果存在更有效的方法,则会出现问题。

 >>> import datetime 
>>>>今天= datetime.datetime(2013,06,26)
>>>今天
datetime.datetime(2013,6,26,0,0)
>>> day_of_week = today.isocalendar()[2] - 1
>>> day_of_week
2
>>> start_date = today - timedelta(days = day_of_week)
>>>> start_date
datetime.datetime(2013,6,24,0,0)#获得星期一
>>> dates = [start + timedelta(days = i)for i in range(7)]
>>>>日期
[datetime.datetime(2013,6,24,0,0),
datetime.datetime(2013,6,25,0,0),
datetime.datetime(2013, 6,26,0,0),
datetime.datetime(2013,6,27,0,0),
datetime.datetime(2013,6,28,0,0),
datetime.datetime(2013,6,29,0,0),
datetime.datetime(2013,6,30,0,0)]

我希望星期一是开始日期,并在星期日结束日期。

解决方案

p>我会使用 datetime.date()来澄清我们在这里计算日期,并使用 date.weekday() 以取代当前的工作日使用 .isocalendar()呼叫,给我们一个基于0的工作日号码(0是星期一)。

  import datetime 

today = datetime.date(2013,06,26)
dates = [today + datetime.timedelta(days = i)for i in range(0 - today.weekday(),7 - today.weekday())]

演示:

 >>>来自pprint import pprint 
>>>> import datetime
>>>> today = datetime.date(2013,06,26)
>>> pprint([today + datetime.timedelta(days = i)for i in range(0 - today.weekday(),7 - today.weekday())])
[datetime.date(2013,6,24 ),
datetime.date(2013,6,25),
datetime.date(2013,6,26),
datetime.date(2013,6,27),
datetime.date(2013,6,28),
datetime.date(2013,6,9),
datetime.date(2013,6,30)]

在python 2上,您可以用替换 range() xrange()如果你喜欢;为7天的价值,这不会有太大的区别。



只是为了使它明确; datetime.weekday() 也存在,还有一个 .isoweekday(),所以没有必要使用 .isocalendar( )任何地方。


Given a day, I want to get all days(datetime instances) of the week in which day is present.

I have a solution, please correct me if there is something wrong of if more efficient method exists.

>>> import datetime
>>> today = datetime.datetime(2013, 06, 26)
>>> today
datetime.datetime(2013, 6, 26, 0, 0)
>>> day_of_week = today.isocalendar()[2] - 1
>>> day_of_week
2
>>> start_date = today - timedelta(days=day_of_week)
>>> start_date
datetime.datetime(2013, 6, 24, 0, 0) # Got monday
>>> dates = [start + timedelta(days=i) for i in range(7)]
>>> dates
[datetime.datetime(2013, 6, 24, 0, 0),
 datetime.datetime(2013, 6, 25, 0, 0),
 datetime.datetime(2013, 6, 26, 0, 0),
 datetime.datetime(2013, 6, 27, 0, 0),
 datetime.datetime(2013, 6, 28, 0, 0),
 datetime.datetime(2013, 6, 29, 0, 0),
 datetime.datetime(2013, 6, 30, 0, 0)]

I want monday to be start date and sunday the end date.

解决方案

I'd use datetime.date() instead to make it clear we are calculating dates here, and use date.weekday() to get the current weekday instead of using the .isocalendar() call, giving us a 0-based weekday number (0 is Monday).

import datetime

today = datetime.date(2013, 06, 26)
dates = [today + datetime.timedelta(days=i) for i in range(0 - today.weekday(), 7 - today.weekday())]

Demo:

>>> from pprint import pprint
>>> import datetime
>>> today = datetime.date(2013, 06, 26)
>>> pprint([today + datetime.timedelta(days=i) for i in range(0 - today.weekday(), 7 - today.weekday())])
[datetime.date(2013, 6, 24),
 datetime.date(2013, 6, 25),
 datetime.date(2013, 6, 26),
 datetime.date(2013, 6, 27),
 datetime.date(2013, 6, 28),
 datetime.date(2013, 6, 29),
 datetime.date(2013, 6, 30)]

On python 2 you can replace range() with xrange() if you like; for a 7-day value that won't make much difference.

Just to make it explicit; datetime.weekday() exists as well, and there is a .isoweekday() too, so there is no need to use .isocalendar() anywhere.

这篇关于如何获取当天的所有datetime实例,给定一天?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆