문자열과 같은 날짜 시간 목록이 많이 있습니다.
Jun 1 2005 1:33PM
Aug 28 1999 12:00AM
데이터베이스에서 적절한 날짜 / 시간 필드로 다시 밀어 넣을 것이므로 실제 날짜 / 시간 개체로 마술로 바꿔야합니다.
이것은 Django의 ORM을 거치므로 SQL을 사용하여 삽입시 변환을 수행 할 수 없습니다.
답변
datetime.strptime
문자열을 날짜 / 시간으로 구문 분석하는 기본 루틴입니다. 주어진 형식 문자열에 의해 결정된 형식으로 모든 종류의 형식을 처리 할 수 있습니다.
from datetime import datetime
datetime_object = datetime.strptime('Jun 1 2005 1:33PM', '%b %d %Y %I:%M%p')
결과 datetime
개체는 표준 시간대가 아닙니다.
연결:
-
문자열
strptime
/strftime
형식 문자열에 대한 Python 설명서 : Python 2 , Python 3 -
strftime.org 는 또한 strftime 에 대한 훌륭한 참고 자료입니다
노트:
strptime
= “문자열 구문 분석 시간”strftime
= “문자열 형식 시간”- 오늘 큰 소리로 발음하면 6 개월 후에 다시 검색 할 필요가 없습니다.
답변
타사 dateutil 라이브러리를 사용하십시오 .
from dateutil import parser
parser.parse("Aug 28 1999 12:00AM") # datetime.datetime(1999, 8, 28, 0, 0)
구문 분석해야하는 형식을 포함하여 대부분의 날짜 형식을 처리 할 수 있습니다. strptime
대부분 올바른 형식을 추측 할 수있는 것보다 편리 합니다.
가독성이 성능보다 중요한 테스트 작성에 매우 유용합니다.
다음과 같이 설치할 수 있습니다.
pip install python-dateutil
답변
시간 모듈 에서 strptime 을 확인하십시오 . strftime 의 반대입니다 .
$ python
>>> import time
>>> my_time = time.strptime('Jun 1 2005 1:33PM', '%b %d %Y %I:%M%p')
time.struct_time(tm_year=2005, tm_mon=6, tm_mday=1,
tm_hour=13, tm_min=33, tm_sec=0,
tm_wday=2, tm_yday=152, tm_isdst=-1)
timestamp = time.mktime(my_time)
# convert time object to datetime
from datetime import datetime
my_datetime = datetime.fromtimestamp(timestamp)
# convert time object to date
from datetime import date
my_date = date.fromtimestamp(timestamp)
답변
정말 깔끔한 표현을 변환 할 수있는 프로젝트를 만들었습니다. timestring을 확인하십시오 .
다음은 몇 가지 예입니다.
pip install timestring
>>> import timestring
>>> timestring.Date('monday, aug 15th 2015 at 8:40 pm')
<timestring.Date 2015-08-15 20:40:00 4491909392>
>>> timestring.Date('monday, aug 15th 2015 at 8:40 pm').date
datetime.datetime(2015, 8, 15, 20, 40)
>>> timestring.Range('next week')
<timestring.Range From 03/10/14 00:00:00 to 03/03/14 00:00:00 4496004880>
>>> (timestring.Range('next week').start.date, timestring.Range('next week').end.date)
(datetime.datetime(2014, 3, 10, 0, 0), datetime.datetime(2014, 3, 14, 0, 0))
답변
이것을 기억하면 날짜 시간 변환에 다시 혼동하지 않아도됩니다.
문자열을 날짜 / 시간 객체 = strptime
다른 형식으로 날짜 / 시간 객체 = strftime
Jun 1 2005 1:33PM
~와 같다
%b %d %Y %I:%M%p
% b 로케일의 약식 이름으로 월 (6 월)
% d 달로 채워진 10 진수 (1)
% Y 십진수로 세기를 가진 해 (2015)
0으로 채워진 10 진수로 표시되는 % I 시간 (12 시간 시계) (01)
0으로 채워진 10 진수로 표시되는 % M 분 (33)
% p 로케일의 AM 또는 PM (PM)
따라서 strptime이 필요 string
합니다.
>>> dates = []
>>> dates.append('Jun 1 2005 1:33PM')
>>> dates.append('Aug 28 1999 12:00AM')
>>> from datetime import datetime
>>> for d in dates:
... date = datetime.strptime(d, '%b %d %Y %I:%M%p')
... print type(date)
... print date
...
산출
<type 'datetime.datetime'>
2005-06-01 13:33:00
<type 'datetime.datetime'>
1999-08-28 00:00:00
날짜 형식이 다른 경우 panda 또는 dateutil.parse를 사용할 수 있습니까?
>>> import dateutil
>>> dates = []
>>> dates.append('12 1 2017')
>>> dates.append('1 1 2017')
>>> dates.append('1 12 2017')
>>> dates.append('June 1 2017 1:30:00AM')
>>> [parser.parse(x) for x in dates]
산출
[datetime.datetime(2017, 12, 1, 0, 0), datetime.datetime(2017, 1, 1, 0, 0), datetime.datetime(2017, 1, 12, 0, 0), datetime.datetime(2017, 6, 1, 1, 30)]
답변
Python> = 3.7.0에서
변환에 날짜 객체에 YYYY-MM-DD 문자열 , datetime.fromisoformat
사용할 수있다.
>>> from datetime import datetime
>>> date_string = "2012-12-12 10:10:10"
>>> print (datetime.fromisoformat(date_string))
>>> 2012-12-12 10:10:10
답변
많은 타임 스탬프에는 시간대가 포함되어 있습니다. 코드가 모든 시간대에서 작동하도록하려면 내부적으로 UTC를 사용하고 이물질이 시스템에 들어갈 때마다 시간대를 연결해야합니다.
파이썬 3.2 이상 :
>>> datetime.datetime.strptime(
... "March 5, 2014, 20:13:50", "%B %d, %Y, %H:%M:%S"
... ).replace(tzinfo=datetime.timezone(datetime.timedelta(hours=-3)))