Python构造具有其他时间参数的日期时间和星期几

3 投票
3 回答
6828 浏览
提问于 2025-04-18 18:03

我需要根据不同的参数来构建一个日期时间对象。比如,我有这些参数:

  • 一个从0到6的整数,这个数字表示星期几。
  • 小时和分钟,以浮点数格式表示(范围从0.0到24.0)。

然后我知道这是今年的第几周。举个例子,假设我想要的日期时间范围是从 2014-07-18 00:00:002014-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)

撰写回答