Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python上个月和上一年_Python_Date_Datetime - Fatal编程技术网

Python上个月和上一年

Python上个月和上一年,python,date,datetime,Python,Date,Datetime,我试图以2016年7月的格式获取上个月和本年度 我已经试过了(但没有成功),它不会打印7月份,而是打印号码: import datetime now = datetime.datetime.now() print now.year, now.month(-1) 获取您可以使用的月份名称 "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split()[last_month-1] 另一种解决方案是使用熊猫,将今天转换为一个月,然后减去一个月。使

我试图以2016年7月的格式获取上个月和本年度

我已经试过了(但没有成功),它不会打印7月份,而是打印号码:

import datetime
now = datetime.datetime.now()
print now.year, now.month(-1)
获取您可以使用的月份名称

"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split()[last_month-1]

另一种解决方案是使用熊猫,将今天转换为一个月,然后减去一个月。使用
strftime
转换为所需格式

import datetime as dt
import pandas as pd

>>> (pd.Period(dt.datetime.now(), 'M') - 1).strftime('%B %Y')
u'July 2016'

如果您正在处理日期,那么该库总是一个很好的库,它可以方便地处理Python stdlib不容易涵盖的内容

首先,如果尚未安装
dateutil
库,请安装该库:

pip install python-dateutil
下一步:

给你:

'July 2016'

您可以仅使用Python datetime库来实现这一点

说明:

  • 将今天日期中的日期替换为1,这样就可以得到本月第一天的日期
  • Doing-timedelta(天数=1)将给出上个月的最后一天
  • 格式化并使用“%B%Y”转换为所需格式

date.today().replace(day=1)
获取当月的第一天,减去1天将获取上月的最后一天

导入日期时间为dt

  • .replace(day=1)将今天的日期替换为一个月的第一天,很简单
  • 减去时间差(1)减去1天,即上个月的最后一天
    last_month=dt.datetime.today().replace(day=1)-dt.timedelta(1)
  • 用户需要的是July,而不是第6个月,因此将%m更新为%B
    上个月的strftime(“%Y,%B”)
从日期时间导入日期时间、时间增量、日期、时间
#日期时间:1个月前
datetime_to=datetime.now().replace(day=15)-timedelta(days=30*1)
#日期:2个月前
date_to=date.today().replace(day=15)-timedelta(days=30*2)
#日期:12个月前
date_to=date.today().replace(day=15)-timedelta(days=30*12)
#会计准则:13个月前的前一天
date_ma=(date.today()-timedelta(1)).replace(day=15)-timedelta(days=30*13)
yyyymm=日期\u ma.strftime(“%Y%m”)\201909
yyyy=日期\u ma.strftime(“%Y”)\2019年
#误差范围测试
从datetime导入datetime、timedelta、日期、时间
作为pd进口熊猫
对于范围内的i(1120):
pdmon=(pd.Period(dt.datetime.now(),'M')-i.strftime('%Y%M'))
wamon=(date.today().replace(day=15)-timedelta(days=30*i)).strftime(“%Y%m”)
如果pdmon!=沃蒙:
打印('不正确的%s个月前:%s,%s'(i,pdmon,wamon))
打破
#37个月前不正确:201709201710

如果您想按OP的要求打印月份名称,而不仅仅是数字,请将其输入代码中,这样才有意义?非常感谢。打印(上个月.strftime(“%B%Y”)@AkshatMahajan不太可能。。你不能只是-30天…如果是31天。。。etc(边缘案例太多)。。。最简单的方法是只减少1,并确保其介于1和1之间12@JoranBeasley您还可以从日历导入月份使用
;month\u name=month\u abbr[上个月]
概念不错,但并不适用于所有情况:
subOneMonth(datetime.datetime(2016,3,31))
为什么
而1
?看起来事情太复杂了。如果更换
失败,您的
res
已指向当月的最后一天。回答得好。。。有时甚至我也会学到新东西:P(我经常使用dateutil,但通常只是日期解析器)使用
date.today().replace(day=1)
可以将当前日期替换为第一天,仅是当月的第一天,然后减去一天,你可以得到上个月的最后一天。请考虑添加几行解释,而不是仅仅粘贴。code@Yatin你能只看到代码吗?你看不到评论和例子吗?是的,我可以看到评论,但你在回答中试图解释的内容仍然不太清楚。用几行解释就能解开这个谜团!:)
pip install python-dateutil
from datetime import datetime
from dateutil.relativedelta import relativedelta

# Returns the same day of last month if possible otherwise end of month
# (eg: March 31st->29th Feb an July 31st->June 30th)
last_month = datetime.now() - relativedelta(months=1)

# Create string of month name and year...
text = format(last_month, '%B %Y')
'July 2016'
import datetime as dt
format(dt.date.today().replace(day=1) - dt.timedelta(days=1), '%B %Y')
>>>'June-2019'
from datetime import date, timedelta

last_month = date.today().replace(day=1) - timedelta(1)             
last_month.strftime("%B %Y")