2012-05-13 27 views
12

Tôi có vấn đề này kỳ lạ, khi tôi tạo ra một lịch với một miền địa phương, các TimeZone chỉ trở lại với địa phương mộtLàm thế nào để có được Time và TimeZone hiện tại từ Locale?

public void start(Locale locale){ 
    String s = locale.getDisplayName(); 
    System.err.println(s); 
    Calendar c = new GregorianCalendar(locale); 
    System.err.println(c.getTimeZone()); 
} 

Và đây là kết quả:

español (Argentina) 
sun.util.calendar.ZoneInfo[id="Europe/Bucharest", //etc more useless date here.... 

Làm thế nào tôi có thể nhận được thời gian thích hợp từ một miền địa phương cụ thể?

+2

Có thể trùng lặp: http://stackoverflow.com/questions/1723073/is-it-possible-to-list-available -timezones-by-locale-in-java –

+0

Locale và TimeZone không nhất thiết liên quan 1: 1. Hãy suy nghĩ về miền địa phương en_. Có các múi giờ khác nhau cho Hoa Kỳ (-> HST, AKDT, PDT, MDT, CDT, EDT). – Javaguru

+0

và [trùng lặp với nhau] (http://stackoverflow.com/questions/1305350/how-to-get-the-current-date-and-time-of-your-timezone-in-java) –

Trả lời

34

Câu trả lời ngắn gọn: bạn không thể.

Câu trả lời dài: Không có điều gì như "múi giờ thích hợp cho một miền địa phương". Đó là chỉ vì có một vài quốc gia có nhiều múi giờ (ví dụ: Hoa Kỳ). Múi giờ là một khái niệm khác.

Dù sao, bạn đang tìm cách giải quyết vấn đề của mình. Tôi đoán rằng bạn đang viết một ứng dụng web và bạn thấy rằng múi giờ đang hoàn nguyên về mặc định của máy chủ. Đó là một tình huống điển hình. Cả hai Locale.getDefault()TimeZone.getDefault() sẽ trả về thông tin liên quan đến máy chủ. JVM không có cách nào để biết múi giờ "thích hợp". Vậy bạn có thể làm gì với nó?

  1. Bạn có thể thêm thông tin múi giờ vào hồ sơ người dùng (nếu có) hoặc tạo hộp kết hợp múi giờ (để người dùng có thể chuyển đổi khi chạy). Sau đó, bạn có thể gán một đối tượng thích hợp cho trường hợp DateFormat và nó sẽ tự động chuyển đổi múi giờ.
  2. Bạn có thể đọc hiện tại khu thời gian bù đắp từ các khách hàng thông qua chức năng Javascript Ngày Object của getTimezoneOffset() và bằng cách nào đó (AJAX) gửi nó đến máy chủ. Vấn đề với phương pháp này là có một số múi giờ với khoảng trống đó và múi giờ đã chọn có thể không thích hợp cho các ngày khác. Tất nhiên bạn có thể đoán múi giờ bằng cách bỏ phiếu dữ liệu theo ngày thay đổi thời gian, nhưng điều này có lẽ không phải là những gì bạn muốn làm.
  3. Bạn có thể gửi thời gian chưa định dạng cho ứng dụng khách (ví dụ: ISO 8601 date-time format hoặc dưới dạng Unix time of the epoch liên quan đến UTC) và có Globalize hoặc Dojo ngày và giờ định dạng cho bạn.

Trong ba lựa chọn có thể, tôi luôn chọn số 1. Bằng cách đặt thông tin múi giờ vào hồ sơ người dùng, bạn biết chắc chắn múi giờ ưa thích của họ là gì, bất kể trình duyệt web hiện tại của họ, v.v. Xin lưu ý rằng một số người dùng có thể muốn sử dụng ứng dụng của bạn khi truy cập các quốc gia khác ...

+0

Ngoài ra còn có một khả năng khác, ví dụ: nếu trang web của bạn liệt kê giờ mở cửa của nhà hàng. Trong trường hợp như vậy, du khách sẽ mong đợi giờ được đặt trong múi giờ của địa điểm của nhà hàng. – herman

+0

@herman: Đúng vậy. Giờ mở cửa của một số cửa hàng, nhà hàng, thư viện hoặc bất kỳ thứ gì nên được liệt kê theo múi giờ địa phương của họ.Tuy nhiên, thông thường nó sẽ là văn bản dạng tự do, thay vì ngày được định dạng, do đó, không có điểm nào trong việc chuyển đổi múi giờ tại đây. Ngoài ra, thêm từ "(địa phương)" có ý nghĩa nếu địa điểm thường xuyên được khách du lịch ghé thăm ... –

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