Python构造datetime,其中包含带有其他时间参数的工作日
我需要从不同的参数构造datetime对象。例如,我得到以下参数:Python构造datetime,其中包含带有其他时间参数的工作日,python,python-2.7,datetime,weekday,Python,Python 2.7,Datetime,Weekday,我需要从不同的参数构造datetime对象。例如,我得到以下参数: 从0到6的整数。这个表示工作日 浮点格式的小时和分钟(从0.0到24.0) 然后我就知道今年的哪一周了。因此,例如,假设datetime应该是从2014-07-18 00:00:00到2014-07-24 23:59:00(秒可以忽略并保留在00)。所以为了得到准确的日期时间,我需要使用上面定义的参数 假设我将获得这些参数4(意思是星期五)和9.5(意思是09:30) 所以通过这样的构建,我应该得到一个日期:2014-07-
- 从0到6的整数。这个表示工作日
- 浮点格式的小时和分钟(从0.0到24.0)
2014-07-18 00:00:00
到2014-07-24 23:59:00
(秒可以忽略并保留在00
)。所以为了得到准确的日期时间,我需要使用上面定义的参数
假设我将获得这些参数4
(意思是星期五)和9.5
(意思是09:30
)
所以通过这样的构建,我应该得到一个日期:2014-07-22 09:30:00
。怎么能做到这样的事情呢
我是否需要通过知道一年中的哪一周和哪一个工作日来获得例如一个月的哪一天
顺便说一下,这是一个更详细的例子,说明我正在努力实现的目标
from datetime import datetime
today = datetime.today() #using this to get the week I'll be working with.
today = today.replace(day=?) #how to get which day I
#need to enter by having weekday and knowing that week is the present one?
如果参数为weekday和t(time),则可以执行类似操作:
如果您有开始日期,请使用的相对值来构造一个将使您进入正确工作日的
timedelta()
对象,然后替换小时和分钟:
from datetime import timedelta
def relative_date(reference, weekday, timevalue):
hour, minute = divmod(timevalue, 1)
minute *= 60
days = reference.weekday() - weekday
return (reference - timedelta(days=days)).replace(
hour=int(hour), minute=int(minute), second=0, microsecond=0)
演示:
我将使用timedelta将工作日之间的差异添加到datetime
from datetime import datetime, timedelta
friday = 4
today = datetime.now()
friday_this_week = today + timedelta(friday - today.weekday())
在您的情况下,只需将今天替换为您想要的一周内的日期。应该使用哪一周?工作日加上时间不足以获得特定日期的信息;它可以是历史上所有星期五的子集中的任何日期。@Martijnpieter在
P.S.
之后查看示例。这一周我知道这是本周。所以我今天才有约会时间。然后我就能知道今天是哪一周。所以我实际上需要用另外一个提到的参数来代替天、小时和分钟。对于小时和分钟,用表示时间的浮点数来替换是很容易的,但当我有工作日时,我如何替换天呢?我得到错误:AttributeError:'datetime.timedelta'对象没有属性'replace'
我实际上不知道一天中的月份。我只知道工作日。啊,对不起,我指的是工作日,不是白天。我将编辑我的答案
>>> from datetime import timedelta, datetime
>>> def relative_date(reference, weekday, timevalue):
... hour, minute = divmod(timevalue, 1)
... minute *= 60
... days = reference.weekday() - weekday
... return (reference - timedelta(days=days)).replace(
... hour=int(hour), minute=int(minute), second=0, microsecond=0)
...
>>> relative_date(datetime.now(), 4, 9.5)
datetime.datetime(2014, 8, 22, 9, 30)
>>> relative_date(datetime.now() - timedelta(days=30), 6, 11.75)
datetime.datetime(2014, 7, 27, 11, 45)
from datetime import datetime, timedelta
friday = 4
today = datetime.now()
friday_this_week = today + timedelta(friday - today.weekday())