Python构造具有其他时间参数的日期时间和星期几
我需要根据不同的参数来构建一个日期时间对象。比如,我有这些参数:
- 一个从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?
3 个回答
1
我会用timedelta来计算工作日之间的时间差,然后加到日期时间上。
from datetime import datetime, timedelta
friday = 4
today = datetime.now()
friday_this_week = today + timedelta(friday - today.weekday())
在你的情况下,只需要把“今天”替换成你想要的那一周里的某个日期就可以了。
3
如果你的参数是工作日和时间,你可以这样做:
from datetime import timedelta
monday = today - timedelta(days=today.weekday())
result = (monday + timedelta(days=weekday)).replace(hour=int(t), minutes=int((t - int(t)) * 60))
1
如果你有一个开始日期,可以利用 datetime.datetime.weekday()
这个函数 的返回值来创建一个 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)
示例:
>>> 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)