2015-01-22 10 views
5

Tôi cóngày Parse và thời gian từ chuỗi với múi giờ sử dụng mũi tên

import arrow 
s = '2015/12/1 19:00:00' 
tz = 'Asia/Hong_Kong' 

Làm thế nào tôi có thể phân tích này với mũi tên như vậy mà tôi nhận được một đối tượng mũi tên với múi giờ tz? Các giá trị mặc định sau cho thời gian UTC.

In [30]: arrow.get(s, 'YYYY/M/D HH:mm:ss') 
Out[30]: <Arrow [2015-12-01T19:00:00+00:00]> 

Tôi biết chức năng .to nhưng chức năng này chuyển đổi múi giờ và không cho phép tôi thay đổi múi giờ.

+1

Trong mũi tên doc tôi thấy rằng các nhà xây dựng các công trình như: "class arrow.arrow.Arrow (năm, tháng, ngày, giờ = 0, phút = 0, giây = 0, micro giây = 0, tzinfo = Không) ". Điều đó có đủ cho vấn đề của bạn không? Nó thực sự trả về một đối tượng mũi tên với bạn muốn tz. – Bestasttung

Trả lời

9

Hãy thử điều này:

arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo=dateutil.tz.gettz(tz)) 
+0

Công trình này hoạt động! Chỉ cần ra khỏi tò mò, là nó có thể làm tương tự với pytz? Tôi nhận được một số kết quả lạ: 'Trong [7]: arrow.get (s, 'YYYY/M/D HH: mm: ss'). Thay thế (tzinfo = pytz.timezone (tz)) Ra [7 ]: ' – mchangun

+1

Không chắc chắn, nhưng tôi nghĩ mũi tên phù hợp hơn với dateutil hơn pytz. –

+0

@mchangun: cách chính xác để phân tích cú pháp thời gian nếu bạn không muốn bỏ qua các lỗi âm thầm: 'pytz.timezone ('Asia/Hong_Kong'). Localize (datetime.strptime (s, '% Y /% m /% d% H:% M:% S '), is_dst = Không) ' – jfs

6

Tôi không đủ điều kiện được nêu ra để thêm một bình luận và chỉ muốn chia sẻ phiên bản đơn giản hơn một chút trong những câu trả lời với biểu hiện múi giờ str.

s = '2015/12/1 19:00:00' 
tz = 'Asia/Hong_Kong' 
arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo=tz) 

hoặc đơn giản là múi giờ địa phương:

arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo='local') 

hoặc quy định phong cách tiêu chuẩn ISO-8601:

arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo='+08:00') 
+0

Đây phải là câu trả lời được chấp nhận từ OP. – hlin117

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