2011-12-17 39 views
22

Vui lòng giúp tôi thay đổi đối tượng ngày giờ (ví dụ: 2011-12-17 11:31:00-05:00) (bao gồm múi giờ) sang dấu thời gian Unix (như hàm time.time() bằng Python).Thay đổi ngày giờ thành dấu thời gian Unix bằng Python

+0

Có thể là một bản sao của http://stackoverflow.com/questions/2775864/python-datetime-to-unix-timestamp –

+0

liên quan: [Chuyển đổi datetime.date để UTC timestamp bằng Python] (http: // stackoverflow.com/a/8778548/4279) – jfs

Trả lời

6

câu trả lời chưa hoàn chỉnh (không đối phó với các múi giờ), nhưng hy vọng hữu ích:

time.mktime(datetime_object.timetuple()) 

** sửa dựa trên những nhận xét sau đây **

Trong chương trình của tôi, người dùng nhập datetime, chọn múi giờ. ... Tôi đã tạo một danh sách múi giờ (sử dụng pytz.all_timezones) và cho phép người dùng chọn một múi giờ từ danh sách đó.

Mô-đun Pytz cung cấp các chuyển đổi cần thiết. Ví dụ. nếu dt là đối tượng datetime của bạn, và người sử dụng chọn 'Mỹ/Đông'

import pytz, calendar 
tz = pytz.timezone('US/Eastern') 
utc_dt = tz.localize(dt, is_dst=True).astimezone(pytz.utc) 
print calendar.timegm(utc_dt.timetuple()) 

Đối số is_dst=True là để giải quyết lần mơ hồ trong khoảng thời gian 1 giờ ở phần cuối của tiết kiệm ánh sáng ban ngày (xem ở đây http://pytz.sourceforge.net/#problems-with-localtime).

+0

Tôi thực sự cần phải đối phó với múi giờ. –

+0

Đối tượng datetime đầu vào có chứa đúng tzinfo không? Hoặc, nếu không, làm cách nào để bạn biết múi giờ nào bạn quan tâm? –

+1

có. Trong chương trình của tôi, người dùng nhập datetime, chọn múi giờ. Tôi sử dụng ngôn ngữ python, tôi tạo ra một danh sách múi giờ (sử dụng pytz.all_timezones) và cho phép người dùng chọn một múi giờ từ danh sách đó. Vấn đề của tôi là làm thế nào để chuyển đổi datetime cùng với id múi giờ để unix timestamp. Tất cả câu trả lời trên không giải quyết được vấn đề của tôi. Làm ơn giúp tôi. –

14

Một cách khác là:

import calendar 
from datetime import datetime 
d = datetime.utcnow() 
timestamp=calendar.timegm(d.utctimetuple()) 

Timestamp là dấu thời gian unix mà hiển thị ngày tháng cùng với đối tượng datetime d.

+4

lưu ý: nó loại bỏ các phân số của một giây. Để bảo tồn micro giây, hãy sử dụng: ['(d - datetime (1970,1,1)) .total_seconds()'] (http://stackoverflow.com/a/8778548/4279) – jfs

12
import time 

import datetime 

dtime = datetime.datetime.now() 

ans_time = time.mktime(dtime.timetuple()) 
+2

Giờ địa phương có thể mơ hồ, ví dụ: chuyển tiếp cuối cùng của DST ("giảm trở lại"). 'timetuple()' đặt 'tm_isdst' thành' -1' để buộc 'mktime()' đoán, có 50% cơ hội nó sai. Sử dụng thời gian utc hoặc các đối tượng datetime nhận biết. – jfs

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