Tôi đang chạy một ứng dụng Tomcat và tôi cần hiển thị một số giá trị thời gian. Thật không may, thời gian là đến một giờ tắt. Tôi đã xem xét và phát hiện rằng TimeZone mặc định của tôi đang được đặt thành:Vùng thời gian Java bị rối loạn
sun.util.calendar.ZoneInfo[id="GMT-08:00",
offset=-28800000,
dstSavings=0,
useDaylight=false,
transitions=0,
lastRule=null]
Thay vì múi giờ Thái Bình Dương. Điều này được chỉ rõ hơn khi tôi cố gắng in múi giờ mặc định là display name và nó xuất hiện "GMT-08: 00", điều này dường như chỉ ra rằng nó không được đặt chính xác theo múi giờ của Hoa Kỳ Thái Bình Dương. Tôi đang chạy trên Ubuntu Hardy Heron, được nâng cấp từ Gutsy Gibbon.
Có tệp cấu hình nào tôi có thể cập nhật để yêu cầu JRE sử dụng Thái Bình Dương với tất cả thông tin về thời gian tiết kiệm ánh sáng ban ngày liên quan không? Thời gian trên máy của tôi hiển thị chính xác, do đó, nó không có vẻ là một cấu hình sai trên toàn hệ điều hành.
Ok, đây là bản cập nhật. Một đồng nghiệp đề nghị tôi cập nhật JAVA_OPTS trong/etc/profile của tôi để bao gồm "-Duser.timezone = US/Pacific", hoạt động (tôi cũng thấy CATALINA_OPTS, mà tôi cũng cập nhật). Trên thực tế, tôi chỉ xuất chuyển đổi sang các biến thay vì sử dụng/etc/profile mới (khởi động lại sau sẽ nhận các thay đổi và tôi sẽ là vàng).
Tuy nhiên, tôi vẫn nghĩ rằng có giải pháp tốt hơn ... cần có cấu hình cho Java ở đâu đó cho biết múi giờ nào đang sử dụng hoặc cách lấy múi giờ. Nếu ai đó biết một thiết lập như vậy, điều đó sẽ rất tuyệt vời, nhưng bây giờ đây là một cách giải quyết tốt.
Tôi đang sử dụng 1,5 và chắc chắn đó là vấn đề DST nhất. Như bạn có thể thấy, múi giờ được đặt để không sử dụng tiết kiệm ánh sáng ban ngày. Niềm tin của tôi là nó thường được thiết lập để bù đắp -8 chứ không phải múi giờ Thái Bình Dương cụ thể. Vì chênh lệch chung -8 không có thông tin tiết kiệm ánh sáng ban ngày, nên dĩ nhiên là không sử dụng nó, nhưng câu hỏi đặt ra là, ở đâu tôi yêu cầu Java sử dụng múi giờ Thái Bình Dương khi nó khởi động? Tôi không tìm kiếm một giải pháp có lập trình, nó phải là một giải pháp cấu hình.
+1: Tôi vừa chạy vào máy chủ Ubuntu 9.10 được cập nhật đầy đủ này. Sun JDK 1.6.0_15-b03, Hệ thống được cấu hình tại thời điểm cài đặt cho múi giờ Hoa Kỳ/Đông./etc/localtime chứa nội dung giống nhau của/usr/share/zoneinfo/US/Eastern. Java tạo kết quả không chính xác cho các ngày từ ngày 15 tháng 3 năm 2010 đến ngày 25 tháng 4. Sau khi thay thế tệp bằng một liên kết tượng trưng đến/usr/share/zoneinfo/US/Eastern, bây giờ tôi nhận được kết quả chính xác. Tôi kinh ngạc lỗi này là a) vẫn mở, b) ảnh hưởng đến máy chủ Ubuntu được cập nhật đầy đủ (9.10 - Karmic). –
Lỗi này được ghi chú là đã đóng trong phiên bản Java 7 (b72). – Raedwald
Thay đổi/etc/localtime thành liên kết tượng trưng; bạn có thể mong đợi phá vỡ mọi thứ trong các hệ thống Linux hiện đại hơn (ví dụ, khi các gói được nâng cấp hoặc có thể khi khởi động - tôi nghi ngờ lý do thay đổi từ liên kết tượng trưng sang bản sao của tệp sẽ phải thực hiện với trình tự khởi động và phụ thuộc) đặc biệt nếu/usr/đang ở trên một hệ thống tập tin khác) Tôi thấy hữu ích hơn khi đặt biến môi trường TZ –