2011-09-07 8 views
8

Tôi có dấu thời gian với thông tin múi giờ ở định dạng chuỗi và tôi muốn chuyển đổi này để hiển thị đúng ngày/giờ bằng múi giờ địa phương của tôi. Vì vậy, cho ví dụ ... Tôi cóPython pytz Chuyển đổi dấu thời gian (định dạng chuỗi) từ một múi giờ sang một múi giờ khác

timestamp1 = 2011-08-24 13:39:00 +0800 

và tôi muốn chuyển đổi này để nói múi giờ bù đắp 1000 để dsiplay

timestamp2 = 2011-08-24 15:39:00 +1000 

Tôi đã cố gắng sử dụng pytz nhưng couldnt tìm thấy nhiều ví dụ cho thấy làm thế nào để sử dụng thông tin bù đắp. Một liên kết khác mà tôi tìm thấy trên stackoverflow mô tả vấn đề chính xác này là here. Tôi đã hy vọng có một số cách tốt hơn tôi có thể xử lý này bằng cách sử dụng pytz. Cảm ơn tất cả các đề xuất trước :).

CẬP NHẬT

Cảm ơn Cixate. Tôi vừa tìm ra giải pháp rất giống với giải pháp của bạn. Tìm thấy những liên kết hữu ích - LINK1LINK2

gửi bài giải pháp cho everyones hưởng lợi

from datetime import datetime 
import sys, os 
import pytz 
from dateutil.parser import parse 

datestr = "2011-09-09 13:20:00 +0800" 
dt = parse(datestr) 
print dt 
localtime = dt.astimezone (pytz.timezone('Australia/Melbourne')) 
print localtime.strftime ("%Y-%m-%d %H:%M:%S") 
2011-09-09 15:20:00 
+0

Cân nhắc đánh dấu câu trả lời Cixate như đúng bằng cách nhấn vào hộp kiểm của nó, vì giải pháp cuối cùng của bạn là gần gợi ý Cixate của. – wberry

Trả lời

9

datetime.astimezone sẽ làm chuyển đổi cơ bản của bạn một khi bạn có một đối tượng datetime. Nếu bạn đang cố gắng để có được một đối tượng datetime từ một chuỗi, PIP cài đặt python-dateutil và nó đơn giản như:

>>> from dateutil.parser import parse 
>>> from dateutil.tz import tzoffset 
>>> dt = parse('2011-08-24 13:39:00 +0800') 
datetime.datetime(2011, 8, 24, 13, 39, tzinfo=tzoffset(None, 28800)) 
>>> dt.astimezone(tzoffset(None, 3600)) 
datetime.datetime(2011, 8, 24, 6, 39, tzinfo=tzoffset(None, 3600)) 
+0

Cảm ơn Cixate .. Tôi vừa có giải pháp sử dụng dateutil.parser và datetime.astimezone. Giải pháp của tôi hơi khác với giải pháp của bạn. Hãy tha thứ cho sự thiếu hiểu biết của tôi, nhưng bạn có thể vui lòng giải thích cách bạn lấy thông tin múi giờ bằng cách sử dụng "tzoffset (None, 3600)" – Angela

+0

Trong ví dụ của bạn mà bạn muốn dịch thành giá trị "+1000", rất tiếc là tôi đã đọc "+0100 "nhưng hiệu trưởng thì giống nhau. Tham số đầu tiên của tzoffset() là tên, có thể là Không nếu bạn không quan tâm để biết nó. Thứ hai là bù trừ từ UTC trong vài giây. 3600 trong 1 giờ hoặc 36000 trong 10 giờ. – six8

+0

Cảm ơn Cixate đã giải thích. – Angela