59👍
You can use
import dateutil.parser
dateutil.parser.parse('2008-04-10 11:47:58-05')
Which returns a datetime (that can be assigned to the DateTimeField).
107👍
You can also use Django’s implementation. I would in fact prefer it and only use something else, if Django’s parser cannot handle the format.
For example:
>>> 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>)
To have it converted to the right timezone when none is known, use make_aware from django.utils.timezone
.
So ultimately, your parser utility would be:
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
- [Django]-How to use subquery in django?
- [Django]-Django: SocialApp matching query does not exist
- [Django]-How to submit form without refreshing page using Django, Ajax, jQuery?
17👍
I’ve been using this:
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'))
- [Django]-Caching query results in django
- [Django]-Do CSRF attacks apply to API's?
- [Django]-Inline Form Validation in Django
6👍
String format of Django DateTimeField is “%Y-%m-%dT%H:%M:%S.%fZ”.
Hence, conversion between eachother can be done using strptime() or strptime() using this format.
eg. for string formatted value (2016-10-03T19:00:00.999Z), it can be converted
to Django datetime object as :
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")
- [Django]-Django: Adding "NULLS LAST" to query
- [Django]-Django: 'current_tags' is not a valid tag library
- [Django]-ChoiceField in Django model
3👍
If you’re using Django Forms, you can specify input_formats
to your DateField
. See the DateField documentation
If you are wanting to parse arbitrary date information, you could use something like parsedatetime and implement a method that Django calls to do the parsing before it hits the validators. (See this SO answer for a good summary of how validations work and when to insert them)
- [Django]-Differences between STATICFILES_DIR, STATIC_ROOT and MEDIA_ROOT
- [Django]-Django: allow line break from textarea input
- [Django]-How do I get the object if it exists, or None if it does not exist in Django?
2👍
To make standard format:
from django.utils.dateparse import parse_datetime
formatted_datetime = parse_datetime(YOUR_STRING_DATETIME).strftime('%Y-%m-%d %H:%M:%S')
print(f"formatted_datetime: {formatted_datetime}")
You will see something like this:
2022-02-09 12:58:52
Be successful
- [Django]-FileUploadParser doesn't get the file name
- [Django]-Can I call a view from within another view?
- [Django]-Managing static files for multiple apps in Django