converting string 'yyyy-mm-dd' into datetime python
本问题已经有最佳答案,请猛点这里访问。
我有来自用户的原始输入,如"2015-01-30"…对于我使用的查询,必须将日期输入为字符串,如"YYYY-MM-DD"。
我希望在循环结束时将日期增加1个月,S.T"2015-01-30"变为"2015-02-27"(理想情况下是下个月的最后一个工作日)。我希望有人能帮助我;我使用的是python,我想转换成datetime的原因是我找到了一个函数来添加1个月。
理想情况下,我需要回答的两个问题是(在python中):
1)如何将字符串"yyyy-mm-dd"转换为python日期时间,并在应用timedelta函数后转换回字符串
2)和/或如何在字符串"yyyy-mm-dd"中添加1个月
也许这些例子可以帮助你得到一个想法:
1 2 3 4 5 6 7 8 9 10 11 | from dateutil.relativedelta import relativedelta import datetime date1 = datetime.datetime.strptime("2015-01-30","%Y-%m-%d").strftime("%d-%m-%Y") print(date1) today = datetime.date.today() print(today) addMonths = relativedelta(months=3) future = today + addMonths print(future) |
如果导入日期时间,它将在管理日期和时间变量方面提供更多选项。在上面的示例中,我有一些示例代码将向您展示它是如何工作的。
例如,如果你想在某个日期加上x天、月或年,这也是非常有用的。
编辑:为了回答你在这篇文章下面的问题,我建议你看一下"日历"。
例如:
1 2 3 4 5 | import calendar january2012 = calendar.monthrange(2002,1) print(january2012) february2008 = calendar.monthrange(2008,2) print(february2008) |
这将返回该月的第一个工作日和该月的天数。这样你就可以计算出这个月最后一个工作日是什么。以下是关于它的更多信息:链接这里还有一个loook,看看你能用什么:link
将字符串"yyyy-mm-dd"转换为
1 2 3 4 5 | from datetime import date date_string = '2015-01-30' now = date(*map(int, date_string.split('-'))) # or now = datetime.strptime(date_string, '%Y-%m-%d').date() |
下个月的最后一个工作日
1 2 3 4 5 6 7 8 | from datetime import timedelta DAY = timedelta(1) last_bday = (now.replace(day=1) + 2*31*DAY).replace(day=1) - DAY while last_bday.weekday() > 4: # Sat, Sun last_bday -= DAY print(last_bday) # -> 2015-02-27 |
它不考虑假期。
您可以使用一个一行程序,它接受
1 | x = add_months(datetime.datetime(*[int(item) for item in x.split('-')]), 1).strftime("%Y-%m-%d") |
1 2 3 4 5 6 | >>> import datetime, calendar >>> x ="2015-01-30" >>> x = add_months(datetime.datetime(*[int(item) for item in x.split('-')]), 1).strftime("%Y-%m-%d") >>> x '2015-02-28' >>> |
1 2 3 4 5 6 | def add_months(sourcedate,months): month = sourcedate.month - 1 + months year = sourcedate.year + month / 12 month = month % 12 + 1 day = min(sourcedate.day,calendar.monthrange(year,month)[1]) return datetime.date(year,month,day) |
要将该格式的字符串转换为python日期对象,请执行以下操作:
1 2 3 4 5 6 7 8 | In [1]: import datetime In [2]: t ="2015-01-30" In [3]: d = datetime.date(*(int(s) for s in t.split('-'))) In [4]: d Out[4]: datetime.date(2015, 1, 30) |
转到下个月的最后一天:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | In [4]: d Out[4]: datetime.date(2015, 1, 30) In [5]: new_month = (d.month + 1) if d.month != 12 else 1 In [6]: new_year = d.year if d.month != 12 else d.year + 1 In [7]: import calendar In [8]: new_day = calendar.monthrange(new_year, new_month)[1] In [9]: d = d.replace(year=new_year,month=new_month,day=new_day) In [10]: d Out[10]: datetime.date(2015, 2, 28) |
这个
1 2 | In [11]: str(d) Out[11]: '2015-02-28' |
编辑:
要获取月份的最后一个工作日(即星期一到星期五),请执行以下操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 | In [8]: new_day = calendar.monthrange(new_year, new_month)[1] In [9]: d = d.replace(year=new_year,month=new_month,day=new_day) In [10]: day_of_the_week = d.isoweekday() In [11]: if day_of_the_week > 5: ....: adj_new_day = new_day - (day_of_the_week - 5) ....: d = d.replace(day=adj_new_day) ....: In [11]: d Out[11]: datetime.date(2015, 2, 27) |