在python中查找月份的第一天

tky*_*ass 38 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)
Run Code Online (Sandbox Code Playgroud)

这样做有更清洁的方法吗?

小智 126

可以在同一条线上完成

from datetime import datetime

datetime.today().replace(day=1)
Run Code Online (Sandbox Code Playgroud)

  • 但它确实解决了人们通过搜索引擎来到这里的问题:) (46认同)
  • 这实际上并没有解决发布的问题.请注意约束"如果我当前的日期超过了当月的25日,则第一个日期变量将保留下个月的第一个日期" (6认同)
  • @ffghfgh 不认为这永远有效。如果“今天”是 3 月 1 日,那么回溯 30 天就会过去 1 月的 2 月。 (2认同)

and*_*rew 41

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

import datetime 

todayDate = datetime.date.today()
if todayDate.day > 25:
    todayDate += datetime.timedelta(7)
print todayDate.replace(day=1)
Run Code Online (Sandbox Code Playgroud)

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


lam*_*ave 9

使用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)
Run Code Online (Sandbox Code Playgroud)


小智 9

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)
Run Code Online (Sandbox Code Playgroud)


ImP*_*0R_ 5

使用箭头

import arrow
arrow.utcnow().span('month')[0]
Run Code Online (Sandbox Code Playgroud)