2012-08-27 9 views
6

Tôi đã xác minh rằng dateutils.tz.tzlocal() không hoạt động trên heroku và ngay cả khi nó đã làm, nó sẽ không chỉ nhận được tz từ hệ điều hành của máy tính của nó trên, không necessarly người sử dụng?Sử dụng python, cách chính xác nhất để tự động xác định múi giờ hiện tại của người dùng

Thiếu thời gian lưu trữ múi giờ của người dùng, có cách nào để xác định nơi yêu cầu đến từ đâu không? (Tôi đang sử dụng bình)

Twitter không có một môi trường để điều chỉnh múi giờ của bạn nhưng tôi đang tự hỏi làm thế nào họ xác định những gì mặc định nên được và làm thế nào mà có thể làm việc khi người dùng không đăng nhập.

+0

Những loại môi trường bạn đang nói về? Nếu người dùng ssh từ khắp nơi trên thế giới thì sao? –

+1

điều này sẽ được thực hiện tốt hơn với js kể từ khi chạy phía khách hàng? –

+0

Tất cả các ứng dụng web tôi đã làm việc với lưu trữ tùy chọn múi giờ của người dùng. Đó là một mẫu nhỏ, nhưng một mẫu dù sao. Nó tương đối không phù hợp, nhưng nó đơn giản và nó hoạt động tốt với các lỗi nhỏ nhất do các máy khách/hệ điều hành lạ :) –

Trả lời

1

Nếu bạn có thể dễ dàng lấy địa chỉ IP của người dùng từ trong bình (có thể từ đối tượng request?), Bạn có thể sử dụng vị trí địa lý. Ví dụ. qua http://www.hostip.info/.

Mặc dù vậy, có lẽ không phải là 100% dễ dàng. Ví dụ: nếu ai đó sử dụng VPN hoặc một loại proxy khác, bạn sẽ không thấy địa chỉ IP "thực" của mình.

+2

Tôi không biết nó sẽ hoạt động nhưng phức tạp hơn nhiều so với giải pháp js .. –

+0

Vâng, thực sự. Tôi không quen thuộc với js. Người ta học một cái gì đó mới ở đây hàng ngày. :-) –

+0

nếu bạn muốn nhận múi giờ từ một vị trí; [bạn có thể] (http://stackoverflow.com/q/16505501/4279). – jfs

9

Bạn có thể sử dụng Javascript và đặt múi giờ của khách hàng trong cookie. Bạn thậm chí có thể sử dụng một yêu cầu AJAX và sau đó gửi bù đắp cho máy chủ và lưu trong phiên của khách hàng.

var offset = new Date().getTimezoneOffset(); 

Mô tả

Các múi giờ bù đắp là sự khác biệt, chỉ trong vài phút, giữa UTC và giờ địa phương. Lưu ý rằng> điều này có nghĩa là chênh lệch là dương nếu múi giờ địa phương nằm sau UTC và âm nếu nó ở phía trước. Ví dụ: nếu múi giờ của bạn là UTC + 10 (Giờ chuẩn miền Đông Úc), -600 sẽ được trả lại. thời gian tiết kiệm ánh sáng ban ngày ngăn giá trị này từ là một hằng số ngay cả đối với một miền địa phương cho

Mozilla Javascript Reference: getTimezoneOffset

+0

không có dấu hiệu trái ngược với những gì thường được gọi là utc offset (giờ địa phương = utc + offset). – jfs