在 python 和 Django 中从 <day> <time> 转换为 DateTime,然后返回

Converting from <day> <time> to DateTime in python and Django, and back

我正在尝试使用 strptime 将日期和时间转换为 DateTime 字段。也就是说,将 "Friday 3:00 PM" 之类的输入转换为日期时间字段。这是针对连续三天举行的活动,因此我知道星期五将是二月的特定日子,依此类推。

我的问题是,我该怎么做?例如,如何将星期五 3:00 下午转换为 2017-02-24 15:00:00?

我的 Django 项目中 views.py 现在拥有的是:

new_request.start = time.strptime(form.cleaned_data['start'], '%A %I:%M %p')

然后,我必须稍后使用 strftime 从日期时间字段打印出 "Friday 3:00 PM",我认为这与上述相反?

谢谢!

您可以调整下面的示例以实现您想要的效果:

import time

time.strftime("%Y-%d-%m %H:%M:%S", time.strptime('Friday 3 February 2017 3:00PM', '%A %d %B %Y %I:%M%p'))
# Output: '2017-03-02 15:00:00'

如果年和月固定为2017年和二月,那么"Friday 3:00 PM"可以转换如下:

time.strftime("2017-%d-2 %H:%M:%S", time.strptime('Friday 3 3:00PM', '%A %d %I:%M%p'))
# Output: '2017-03-2 15:00:00'

如果您想获得 datetime 对象,请使用以下命令:

from datetime import datetime

datetime.strptime('Friday 3 February 2017 3:00PM', '%A %d %B %Y %I:%M%p')
# Output: datetime.datetime(2017, 2, 3, 15, 0)

您可以使用python-dateutil 将可读时间字符串解析为日期时间对象。非常方便易用。

其文档页面中的示例:

>>> from dateutil.relativedelta import *
>>> from dateutil.easter import *
>>> from dateutil.rrule import *
>>> from dateutil.parser import *
>>> from datetime import *
>>> now = parse("Sat Oct 11 17:13:46 UTC 2003")
>>> today = now.date()
>>> year = rrule(YEARLY,dtstart=now,bymonth=8,bymonthday=13,byweekday=FR)[0].year
>>> rdelta = relativedelta(easter(year), today)
>>> print("Today is: %s" % today)
Today is: 2003-10-11
>>> print("Year with next Aug 13th on a Friday is: %s" % year)
Year with next Aug 13th on a Friday is: 2004
>>> print("How far is the Easter of that year: %s" % rdelta)
How far is the Easter of that year: relativedelta(months=+6)
>>> print("And the Easter of that year is: %s" % (today+rdelta))
And the Easter of that year is: 2004-04-11