[python] 문자열을 날짜 / 시간으로 변환

문자열과 같은 날짜 시간 목록이 많이 있습니다.

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 = “문자열 형식 시간”
  • 오늘 큰 소리로 발음하면 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)))