2012-07-09 33 views
8
Mon Jul 09 09:20:28 +0000 2012 

Nếu tôi có định dạng như STRING, làm cách nào để biến nó thành dấu thời gian unix?Trong Python, làm thế nào tôi có thể biến định dạng này thành một dấu thời gian unix?

Lưu ý: Tôi nhận được định dạng này từ Twitter của API:

https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=twitter

+0

Bạn cần phải phân tích cú pháp: http://docs.python.org/library/datetime.html#strftime-strptime-behavior – Blender

+0

xem http://devpython.com/2011/08/11/convert này -utc-date-string-to-unix-timestamp/ –

+0

@Blender: Định dạng của OP có vẻ phức tạp. Đối với '+ 0000', anh ta cần'% z' nhưng kết quả trong 'ValueError: 'z' là một chỉ thị không đúng định dạng '% a% b% d% H:% M:% S% z% Y'' – ThiefMaster

Trả lời

1
+0

Vì vậy, tại sao không bao gồm một số mã ví dụ thực sự phân tích cú pháp định dạng được sử dụng mà không có lỗi? – ThiefMaster

+0

sau đó bạn cần phải chuyển đổi sang dấu thời gian unix ... xem http://stackoverflow.com/questions/2775864/python-datetime-to-unix-timestamp @thiefmaster ... Tôi nghĩ rằng câu trả lời của hy vọng là đủ để có được anh ta nơi anh ấy muốn cũng như cho phép anh ta tìm ra các định dạng khác –

+0

@JoranBeasley: Xem nhận xét của tôi về câu hỏi. Định dạng của anh ta dường như không * là * tầm thường để phân tích cú pháp. – ThiefMaster

8

Các lựa chọn tốt nhất là sử dụng dateutil.parser.parse() mang đến cho bạn một datetime đối tượng có thông tin múi giờ thích hợp:

>>> import dateutil.parser 
>>> dt = dateutil.parser.parse('Mon Jul 09 09:20:28 +0200 2012') 
>>> dt 
datetime.datetime(2012, 7, 9, 9, 20, 28, tzinfo=tzoffset(None, 7200)) 

Bây giờ bạn chỉ cần chuyển nó sang một dấu thời gian UNIX:

>>> import time 
>>> int(time.mktime(dt.timetuple())) 
1341822028 

Các định dạng mà bạn có cũng có thể được dễ dàng phân tách bằng email.utils.parsedate_tz:

>>> import datetime 
>>> import email.utils 
>>> parts = email.utils.parsedate_tz('Mon Jul 09 09:20:28 +0200 2012') 
>>> dt = datetime.datetime(*parts[:6]) - datetime.timedelta(seconds=parts[-1]) 
>>> str(dt) 
'2012-07-09 07:20:28' 

Đây là thực sự làm thế nào email.utils.parsedate_to_datetime trong Python 3.3 được thực hiện (nếu bạn muốn sao chép & dán này vào dự án của bạn, lại đặt __parsedate_tz với parsedate_tz từ email.utils):

def parsedate_to_datetime(data): 
    if not data: 
     return None 
    *dtuple, tz = __parsedate_tz(data) 
    if tz is None: 
     return datetime.datetime(*dtuple[:6]) 
    return datetime.datetime(*dtuple[:6], 
      tzinfo=datetime.timezone(datetime.timedelta(seconds=tz))) 
1

Nếu múi giờ được biết đến là luôn 0000, bạn có thể sử dụng:

time.strptime('Mon Jul 09 09:20:28 +0000 2012', '%a %b %d %H:%M:%S +0000 %Y') 

này trả về một cấu trúc datetime. Nếu bạn cần unix giây kể từ thời đại, chạy qua time.mktime(), như sau:

>>> time.mktime(time.strptime('Mon Jul 09 09:20:28 +0000 2012', '%a %b %d %H:%M:%S +0000 %Y')) 
1341818428.0 

hoặc time.gmtime() nếu thực sự múi giờ luôn là UTC.

Các vấn đề liên quan