尝试将列表中的整数插入datetime对象

时间:2010-02-28 00:36:51

标签: python datetime range

我想要完成的事情非常简单:从一个范围创建一个循环(下面非常自我解释),它将月份插入到datetime对象中。我知道%d需要一个整数,我知道'月'类型是int ...所以我有点不知道为什么我不能替换我的月变量。这是我的代码:

all_months=range(1,13)
for month in all_months:
    month_start = (datetime.date(2010,'%d',1))%month
    next_month_begin= datetime.date(2010,'%d',1)%(month+1)  
    month_end=next_month_begin - timedelta(days=1)
    print month_start                                        
    print month_end

我做错了什么?

所有帮助表示赞赏!谢谢

4 个答案:

答案 0 :(得分:2)

这里有一些你需要解决的问题。

编辑:首先,要小心你的范围,因为你使用月份+ 1来创建next_month_begin,你不希望它大于12,否则你会收到错误。

接下来,当您尝试创建日期对象时,您使用(datetime.date(2010,'%d',1))%month时将月份作为字符串传递。您的代码可能会抛出此错误TypeError: an integer is required

你需要给它一个表示月份的整数,而不是整数的字符串(1'1'之间存在差异)。这也是一个简单的修复,因为你有一个已经是整数的名为month的变量,只需使用它而不是创建一个字符串。所以你的代码应该是这样的:

month_start = datetime.date(2010,month,1)

我认为您可以弄清楚如何将其应用于next_month_begin作业。

最后一个问题是你需要使用datetime.timedelta告诉Python在datetime模块中查找timedelta()函数 - 你的程序当前会给你一个错误说timedelta没有定义。

如果您在应用这些修补程序时遇到任何问题,请与我们联系。一定要包括你可能会得到的错误。

答案 1 :(得分:2)

你还有其他答案,但这是一种获得本月最后一天的方法。添加31天将使您进入下个月,无论当月的天数如何,然后返回到第一天并减去一天将给出结束日期。

import datetime
for month in range(1,13):
    month_start = datetime.date(2010,month,1)
    into_next_month = month_start + datetime.timedelta(days=31)
    month_end = into_next_month.replace(day=1) - datetime.timedelta(days=1)
    print month_start,month_end                                       

答案 2 :(得分:0)

month是一个变量,您可以使用它来创建日期时间对象。我想你想做以下事情:

month_start = datetime.date(2010, month, 1)
next_month_begin = datetime.date(2010, month+1, 1)

这将起作用,因为datetime.date()需要3个整数参数。 '%d' % month会将整数month格式化为字符串。例如,'%04d' % 3会将数字3格式化为4位且前导零。但重要的是要知道,即使是(几乎未格式化的)字符串"3"也与Python中的数字3不同。

你不能写datetime(...) % 3,因为%运算符只能用于上一个"%03d" % 3示例之类的格式字符串而不能用于日期时间对象。

但是其他类型也可能接受%运算符(不包括datetime对象)。例如,整数接受%运算符以获得除法的余数:3 % 2 # returns 1。但在那里,%的含义完全不同,因为运算符的含义取决于所涉及的类型。例如,尝试3 + 2"3" + "2"。在那里,+的含义不同(整数加法与字符串连接),因为类型也不同。

答案 3 :(得分:0)

查看日历模块(http://docs.python.org/library/calendar.html)。

这种东西包括电池......

你可以这样做:

from calendar import Calendar
def start_and_end_days(year, month):
    cal = Calendar()
    month_days = [day for day in cal.itermonthdays(year, month) if day.month == month]
    first_day = month_days[0]
    last_day = month_days[-1]
    return (first_day, last_day)