在python中查找月份的第一天

时间:2016-05-23 16:42:59

标签: python datetime

我试图在python中找到一个月的第一天有一个条件:如果我当前的日期超过了当月的25日,那么第一个日期变量将保存下个月的第一个日期,而不是本月。我正在做以下事情:

import datetime 
todayDate = datetime.date.today()
if (todayDate - todayDate.replace(day=1)).days > 25:
    x= todayDate + datetime.timedelta(30)
    x.replace(day=1)
    print x
else:
    print todayDate.replace(day=1)

有更清洁的方法吗?

11 个答案:

答案 0 :(得分:93)

可以在同一行上完成

from datetime import datetime

datetime.today().replace(day=1)

答案 1 :(得分:32)

这是一个简洁的解决方案。

import datetime 

todayDate = datetime.date.today()
if todayDate.day > 25:
    todayDate += datetime.timedelta(7)
print todayDate.replace(day=1)

原始代码示例需要注意的一点是,如果您正在测试1月的最后一天,使用timedelta(30) 会导致麻烦。这就是我使用7天三角洲的原因。

答案 2 :(得分:6)

使用dateutil

from datetime import date
from dateutil.relativedelta import relativedelta

today = date.today()
first_day = today.replace(day=1)
if today.day > 25:
    print(first_day + relativedelta(months=1))
else:
    print(first_day)

答案 3 :(得分:1)

是的,首先将日期时间设置为当月的开头。

第二次测试当前日期日> 25并获得真/假。如果为True,则在月​​份datetime对象的开头添加一个月。如果为false,则使用datetime对象,其值设置为月初。

import datetime 
from dateutil.relativedelta import relativedelta

todayDate = datetime.date.today()
resultDate = todayDate.replace(day=1)

if ((todayDate - resultDate).days > 25):
    resultDate = resultDate + relativedelta(months=1)

print resultDate

答案 4 :(得分:1)

箭头模块将引导您远离细微的错误,并且更容易使用旧版产品。

import arrow

def cleanWay(oneDate):
    if currentDate.date().day > 25:
        return currentDate.replace(months=+1,day=1)
    else:
        return currentDate.replace(day=1)


currentDate = arrow.get('25-Feb-2017', 'DD-MMM-YYYY')
print (currentDate.format('DD-MMM-YYYY'), cleanWay(currentDate).format('DD-MMM-YYYY'))

currentDate = arrow.get('28-Feb-2017', 'DD-MMM-YYYY')
print (currentDate.format('DD-MMM-YYYY'), cleanWay(currentDate).format('DD-MMM-YYYY'))

在这种情况下,您无需考虑不同的月份长度。这是此脚本的输出。

25-Feb-2017 01-Feb-2017
28-Feb-2017 01-Mar-2017

答案 5 :(得分:1)

这可以替代古斯塔沃·爱德华多·贝尔杜马(Gustavo Eduardo Belduma)的答案:

import datetime 
first_day_of_the_month = datetime.date.today().replace(day=1)

答案 6 :(得分:0)

使用arrow

import arrow
arrow.utcnow().span('month')[0]

答案 7 :(得分:0)

您可以使用dateutil.rrule

In [1]: from dateutil.rrule import *

In [2]: rrule(DAILY, bymonthday=1)[0].date()
Out[2]: datetime.date(2018, 10, 1)

In [3]: rrule(DAILY, bymonthday=1)[1].date()
Out[3]: datetime.date(2018, 11, 1)

答案 8 :(得分:0)

找到当月第一天和最后一天的解决方案:

string sRes = "Apple=3;Orange=10;Mango=12";
string[] sSplitStrings = sRes.Split(';');

foreach (string sFruit in sSplitStrings)
{
    string sLabel = sFruit.Substring(0, sFruit.IndexOf("="));
}

答案 9 :(得分:0)

下个月的第一天:

from datetime import datetime

class SomeClassName(models.Model):
    if datetime.now().month == 12:
        new_start_month = 1
    else:
        new_start_month = datetime.now().month + 1

然后我们替换月份和日期

    start_date = models.DateField(default=datetime.today().replace(month=new_start_month, day=1, hour=0, minute=0, second=0, microsecond=0))

答案 10 :(得分:-3)

from datetime import datetime

date_today = datetime.now()
month_first_day = date_today.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
print(month_first_day)
相关问题