将字符串 'yyyy-mm-dd' 转换为日期时间
Converting string 'yyyy-mm-dd' into datetime
我有来自用户的原始输入,例如“2015-01-30”...对于我正在使用的查询,日期必须作为字符串输入 "yyyy-mm-dd"。
我想在循环结束时将日期增加 1 个月 s.t“2015-01-30”变为“2015-02-27”(最好是下个月的最后一个工作日).我希望有人能帮助我;我正在使用 PYTHON,我想转换为 datetime 的原因是我找到了一个添加 1 个月的函数。
理想情况下,我要回答的两个问题是(在 Python 中):
1) 如何将字符串 "yyyy-mm-dd" 转换为 python 日期时间并在应用时间增量函数后转换回字符串
2) AND/or 如何将 1 个月添加到字符串 "yyyy-mm-dd"
您可以使用单行代码,它接受 datetime
,添加一个月(使用定义的函数),然后转换回字符串:
x = add_months(datetime.datetime(*[int(item) for item in x.split('-')]), 1).strftime("%Y-%m-%d")
>>> 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'
>>>
add_months
:
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)
也许这些示例可以帮助您了解:
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 天、月或年,这也非常有用。
编辑:
要在下面回答您的问题 post 我建议您查看 "calendar"
例如:
import calendar
january2012 = calendar.monthrange(2002,1)
print(january2012)
february2008 = calendar.monthrange(2008,2)
print(february2008)
这return你这个月的第一个工作日,以及这个月的天数。
有了它,您可以计算出当月的最后一个工作日是什么时候。
以下是有关它的更多信息:Link
也看看这里,看看你可能会用到什么:Link
将该格式的字符串转换为 Python 日期对象:
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)
要前进到下个月的最后一天:
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)
而这个 datetime.date
对象可以很容易地转换为 'YYYY-MM-DD' 字符串:
In [11]: str(d)
Out[11]: '2015-02-28'
编辑:
要获取当月的最后一个工作日(即周一至周五):
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)
将字符串 'yyyy-mm-dd' 转换为 datetime
/date
python
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()
下个月的最后一个工作日
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
不考虑节假日。
我有来自用户的原始输入,例如“2015-01-30”...对于我正在使用的查询,日期必须作为字符串输入 "yyyy-mm-dd"。
我想在循环结束时将日期增加 1 个月 s.t“2015-01-30”变为“2015-02-27”(最好是下个月的最后一个工作日).我希望有人能帮助我;我正在使用 PYTHON,我想转换为 datetime 的原因是我找到了一个添加 1 个月的函数。
理想情况下,我要回答的两个问题是(在 Python 中):
1) 如何将字符串 "yyyy-mm-dd" 转换为 python 日期时间并在应用时间增量函数后转换回字符串
2) AND/or 如何将 1 个月添加到字符串 "yyyy-mm-dd"
您可以使用单行代码,它接受 datetime
,添加一个月(使用定义的函数),然后转换回字符串:
x = add_months(datetime.datetime(*[int(item) for item in x.split('-')]), 1).strftime("%Y-%m-%d")
>>> 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'
>>>
add_months
:
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)
也许这些示例可以帮助您了解:
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 天、月或年,这也非常有用。
编辑: 要在下面回答您的问题 post 我建议您查看 "calendar"
例如:
import calendar
january2012 = calendar.monthrange(2002,1)
print(january2012)
february2008 = calendar.monthrange(2008,2)
print(february2008)
这return你这个月的第一个工作日,以及这个月的天数。
有了它,您可以计算出当月的最后一个工作日是什么时候。
以下是有关它的更多信息:Link
也看看这里,看看你可能会用到什么:Link
将该格式的字符串转换为 Python 日期对象:
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)
要前进到下个月的最后一天:
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)
而这个 datetime.date
对象可以很容易地转换为 'YYYY-MM-DD' 字符串:
In [11]: str(d)
Out[11]: '2015-02-28'
编辑:
要获取当月的最后一个工作日(即周一至周五):
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)
将字符串 'yyyy-mm-dd' 转换为 datetime
/date
python
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()
下个月的最后一个工作日
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
不考虑节假日。