use*_*786 31 django format datetime
我有一个Django应用程序,其模型包含DateTimeField类型的字段.
我正在以网络格式从网上提取数据2008-04-10 11:47:58-05
.
我相信这个例子中的最后3个字符是时区.
如何在DateTimeField中保留这些数据,两者之间是否有简单的转换?将DateTimeField设置为只包含上述格式的字符串会引发ValidationError.
谢谢!
Mel*_*vyn 74
您也可以使用Django的实现.我实际上更喜欢它,只使用其他东西,如果Django的解析器无法处理格式.
例如:
>>> from django.utils.dateparse import parse_datetime
>>> parse_datetime('2016-10-03T19:00:00')
datetime.datetime(2016, 10, 3, 19, 0)
>>> parse_datetime('2016-10-03T19:00:00+0200')
datetime.datetime(2016, 10, 3, 19, 0, tzinfo=<django.utils.timezone.FixedOffset object at 0x8072546d8>)
Run Code Online (Sandbox Code Playgroud)
要在无人知晓的情况下将其转换为正确的时区,请使用make_aware django.utils.timezone
.
最终,您的解析器实用程序将是:
from django.utils.dateparse import parse_datetime
from django.utils.timezone import is_aware, make_aware
def get_aware_datetime(date_str):
ret = parse_datetime(date_str)
if not is_aware(ret):
ret = make_aware(ret)
return ret
Run Code Online (Sandbox Code Playgroud)
nis*_*isc 43
您可以使用
import dateutil.parser
dateutil.parser.parse('2008-04-10 11:47:58-05')
Run Code Online (Sandbox Code Playgroud)
返回日期时间(可以分配给DateTimeField).
Pau*_*lin 12
我一直在用这个:
from django.utils.timezone import get_current_timezone
from datetime import datetime
tz = get_current_timezone()
dt = tz.localize(datetime.strptime(str_date, '%m/%d/%Y'))
Run Code Online (Sandbox Code Playgroud)
小智 6
Django DateTimeField 的字符串格式为“%Y-%m-%dT%H:%M:%S.%fZ”。因此,可以使用 strptime() 或使用此格式的 strptime() 来完成彼此之间的转换。
例如。对于字符串格式的值 (2016-10-03T19:00:00.999Z),它可以转换为 Django datetime 对象,如下所示:
from datetime import datetime
datetime_str = '2016-10-03T19:00:00.999Z'
datetime_object = datetime.strptime(datetime_str, "%Y-%m-%dT%H:%M:%S.%fZ")
Run Code Online (Sandbox Code Playgroud)