2017-12-12 1 views
0

나는이 데이터베이스에서 문자열 값을 ({STR})로드있어이 값은 {타임 스탬프}에 형식 문자열을 구문 분석 :파이썬은

'W/"datetime\\'2017-10-16T20%3A18%3A02.2644265Z\\'"'

지금 내가로 변환 할 필요가 { 타임 스탬프} 형식을 사용합니다.

이 시도 :

from datetime import datetime 
datetime.strftime(MyStrValue) 

을 그리고있어 :

{TypeError}descriptor 'strftime' requires a 'datetime.date' object but received a 'str' 

이 시도 :

import dateutil.parser 
dateutil.parser.parse(MyStrValue) 

을 그리고있어 :

{ValueError}Unknown string format 

나는 이미 올바른 형식으로되어 있다고 생각하지만 파이썬 초보자이며 뭔가 빠졌다고 생각합니다.

편집 :

문자열이 이미 내가 명시 적으로 형식을 구축하지 않고 그것을 구문 분석하고자하는 포맷되어 있기 때문에 나는 형식을 필요 datetime.strptime을 사용합니다.

+3

가능한 중복 (https://stackoverflow.com/questions/9637838/convert-string-date-to-timestamp -in-python) – Shaido

+0

먼저 datetime str 만 추출한 다음'.strptime()'을 사용하여'datetime'으로 변환하십시오. –

+0

'datetime.strftime()'은 형식을 취하고 현재 날짜를 제공하기 때문에 작동하지 않습니다. 문자열을 사용하고 datetime을 제공하는 함수가 필요합니다. @vishes_shell이 ​​지적했듯이,'datetime.strptime()'이 이것을 할 수 있지만 형식을 입력해야합니다. 날짜 문자열에있는 형식을 알아야합니다. –

답변

0

datetime.strptime (string, format) 메서드를 사용하십시오. 두 방법의 차이를 찾기 : strptime = "문자열 구문 분석시에는" 의 strftime = "문자열 형식 시간"

+0

차이점을 이해하지만 문자열은 이미 형식이 지정되어 있습니다. 다시 포맷하지 않고 구문 분석하고 싶습니다. 또는 명시 적으로 빌드하지 않고 기존 형식을 사용할 수도 있습니다. – MTZ4

-1

을 가장 좋은 해결책은 파서를 사용하고 있습니다 :

from dateutil import parser 
date_obj = parser.parse(date_string) 
+0

이 예상 코드를 사용할 때'{ValueError} Unknown string format'을 받았습니다. – MTZ4

0

이 조금 까다 롭습니다. 먼저 원본 문자열에서 실제 날짜/시간 문자열을 추출한 다음 백분율로 인코딩 된 문자를 적절한 문자로 변환해야하고 마지막으로 시간과 날짜를 파싱 할 수 있어야합니다.

그러나 표준 라이브러리는 데이터의 전체 시간 정밀도를 처리 할 수 ​​없으며 7 자리가 아닌 6 자리 마이크로 초 필드를 사용할 수 있습니다. 또한 단일 문자 시간대 코드는 처리하지 않습니다. 타사 모듈을 사용해야합니다. 그러나 모든 문자열에서 'Z'시간대를 사용하면 UTC 영역이므로 처리하기가 매우 쉽습니다. 즉, UTC에서 오프셋이 0입니다.

여기에 datetime.strptime을 사용하여 원하는 날짜에 가까운 코드를 가져 와서 날짜/시간 구문 분석을 수행 할 수 있습니다. 단순히 시간 데이터의 마지막 두 문자를 무시하고 'Z'를 'UTC'시간대 문자열로 바꿉니다.

나는 약간의 입력 문자열을 조정해야했습니다. 질문에 게시 한 문자열이 유효한 문자열 리터럴이 아닙니다. [파이썬에서 타임 스탬프 문자열을 날짜로 변환]의

from urllib.parse import unquote 
from datetime import datetime 

mystr = 'W/"datetime\'2017-10-16T20%3A18%3A02.2644265Z\'"' 
print('Original:', repr(mystr)) 

# Split on single-quotes 
fields = mystr.split("'") 
print('Fields:', fields) 

# Convert percent-encoded chars to proper chars 
datestr = unquote(fields[1]) 
print('Date:', datestr) 

# Trim the final digit and the time zone letter, replacing it with 'UTC' 
datestr = datestr[:-2] + 'UTC' 

#Convert to a datetime object 
timestamp = datetime.strptime(datestr, '%Y-%m-%dT%H:%M:%S.%f%Z') 
print('Timestamp:', timestamp, repr(timestamp)) 

출력

Original: 'W/"datetime\'2017-10-16T20%3A18%3A02.2644265Z\'"' 
Fields: ['W/"datetime', '2017-10-16T20%3A18%3A02.2644265Z', '"'] 
Date: 2017-10-16T20:18:02.2644265Z 
Timestamp: 2017-10-16 20:18:02.264426 datetime.datetime(2017, 10, 16, 20, 18, 2, 264426)