2015-06-23 26 views
9

Có cách nào để phân tích múi giờ theo định dạng "phổ biến: 00" với strptime không? Ví dụ:múi giờ phân tích cú pháp với dấu hai chấm

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (In 
tel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from datetime import datetime 
>>> datetime.strptime("12:34:56+0000", "%X%z") 
datetime.datetime(1900, 1, 1, 12, 34, 56, tzinfo=datetime.timezone.utc) 
>>> datetime.strptime("12:34:56+00:00", "%X%z") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python34\lib\_strptime.py", line 500, in _strptime_datetime 
    tt, fraction = _strptime(data_string, format) 
    File "C:\Python34\lib\_strptime.py", line 337, in _strptime 
    (data_string, format)) 
ValueError: time data '12:34:56+00:00' does not match format '%X%z' 

Bất kỳ ý tưởng nào?

+0

liên quan: [Chuyển đổi dấu thời gian có bù đắp thành datetime obj bằng strptime] (http://stackoverflow.com/q/12281975/4279) – jfs

Trả lời

4

Hiện nay, không có chữa cho điều này, và đây là lời giải thích và: https://bugs.python.org/issue15873 chính xác hơn, ở đây: https://bugs.python.org/msg169952. Nhưng bạn có thể ghi đè lên vấn đề này, theo cách này:

from datetime import datetime 
d = "2015-04-30T23:59:59+00:00" 
if ":" == d[-3:-2]: 
    d = d[:-3]+d[-2:] 
print(datetime.strptime(d, "%Y-%m-%dT%H:%M:%S%z")) 
0

Bạn cũng có thể sử dụng gấu trúc:

import pandas as pd 
t = pd.to_datetime("2015-04-30T23:59:59+00:00") 

mà sẽ cung cấp cho bạn một đối tượng timestamp:

t.hour 
Out[139]: 14 

t.day 
Out[140]: 30 
1

giải pháp khác là sử dụng thư viện dateutil:

from dateutil import parser 

mystr = '2015-04-30T23:59:59+00:00' 

x = parser.parse(mystr) 

# 2015-04-30 23:59:59+00:00 
Các vấn đề liên quan