-1

我有这个定义,它接收一个字符串作为输入(例如 2013 年 6 月 1 日)并在从输入日期减去 5 天后返回一个字符串。如果日期在月底,这似乎无法正常工作。

def GetEffectiveDate(self, systemdate):
    return datetime.strftime(datetime.strptime(systemdate, '%d %B %Y') - timedelta(days = 5), '%d/%b/%Y')

例如,如果输入是“2013 年 6 月 1 日”,我期望的输出是“27/May/2013”​​,但它返回“27/June/2013”​​。不知道我在这里做错了什么。

4

3 回答 3

2

您的格式字符串不正确,至少根据您的输入。将输出从更改'%d/%b/%Y''%d/%B/%Y'

return datetime.strftime(datetime.strptime(systemdate, '%d %B %Y') - timedelta(days = 5), '%d/%B/%Y')
于 2013-06-03T02:45:01.637 回答
0

正如您在 Python 2.7 中所期望的那样,它对我有用:

系统日期 = '2013 年 6 月 1 日'

datetime.datetime.strftime(datetime.datetime.strptime(systemdate, '%d %B %Y') - datetime.timedelta(days = 5), '%d/%b/%Y')

'2013 年 5 月 27 日'

于 2013-06-03T02:54:22.860 回答
0

在 Python 3.3 中:

from datetime import timedelta, datetime

def GetEffectiveDate(systemdate):
    return datetime.strftime(datetime.strptime(systemdate, '%d %b %Y') - 
        timedelta(days = 5), '%d/%b/%Y')

print(GetEffectiveDate("1 June 2013"))

...产生以下错误:

ValueError: time data '1 June 2013' does not match format '%d %b %Y'

...而按照@Bryan Moyles 的建议更改格式代码:

def GetEffectiveDate(systemdate):
    return datetime.strftime(datetime.strptime(systemdate, '%d %B %Y') - 
        timedelta(days = 5), '%d/%b/%Y')

...产生:

27/May/2013

......正如预期的那样。

于 2013-06-03T03:06:32.487 回答