2009-08-27 40 views
19

Tôi làm cách nào để tìm số DateFormat cho một số Locale nhất định?Định dạng ngày Java cho Locale

+0

FYI, các lớp ngày giờ phiền hà cũ như 'DateFormat' hiện là [cũ] (https://en.wikipedia.org/wiki/Legacy_system), được thay thế bởi [java.time] (https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html) các lớp học. Xem [Hướng dẫn của Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

Trả lời

25
DateFormat.getDateInstance(int,Locale) 

Ví dụ:

import static java.text.DateFormat.*; 

DateFormat f = getDateInstance(SHORT, Locale.ENGLISH); 

Sau đó, bạn có thể sử dụng đối tượng này sang định dạng Date s:

String d = f.format(new Date()); 

Nếu bạn thực sự muốn biết mô hình cơ bản (ví dụ yyyy-MMM-dd) sau đó, vì bạn sẽ nhận được đối tượng SimpleDateFormat trở lại:

SimpleDateFormat sf = (SimpleDateFormat) f; 
String p1 = sf.toPattern(); 
String p2 = sf.toLocalizedPattern(); 
+1

Tôi không nghĩ rằng có một sự bảo đảm rằng DateFormat.getDateInstance (...) trả về một đối tượng SimpleDateFormat, vì vậy việc đưa kết quả vào SimpleDateFormat có thể nguy hiểm (nó có thể không hoạt động trên một triển khai thực hiện Java khác). thậm chí không làm việc trên một phiên bản khác của việc thực hiện của Sun). – Jesper

+1

Điều này rất đúng - không có bảo đảm. Nhưng nó sẽ là một 'SimpleDateFormat' trong thực tế –

+0

FYI, các lớp ngày giờ phiền hà cũ như' java.text.SimpleDateFormat' hiện là [legacy] (https://en.wikipedia.org/wiki/Legacy_system), thay thế bởi các lớp [java.time] (https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html). Xem [Hướng dẫn của Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

-1

Có cách nào khác (không sử dụng SimpleDateFormat cast) để lấy mẫu mặc định cho đối tượng Locale đã cho không?

Related theme.

+1

Tạo bài đăng mới nếu bạn cần đặt câu hỏi hoặc đặt câu hỏi trong phần nhận xét. Chúng được dành riêng cho câu trả lời cho bài đăng gốc. – hfontanez

1

tl; dr

DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL) 
       .withLocale(Locale.CANADA_FRENCH); 

java.time

Các lớp ngày thời gian ban đầu hiện nay là di sản và đã được thay thế bởi các lớp java.time.

DateTimeFormatter có cách đơn giản để tự động bản địa hóa theo Locale khi tạo Chuỗi để thể hiện giá trị ngày giờ. Chỉ định một FormatStyle để cho biết độ dài đầu ra (viết tắt là không).

DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL); 
f = f.withLocale(Locale.CANADA_FRENCH); 

Lấy thời điểm hiện tại. Lưu ý rằng Locale và múi giờ không liên quan gì đến nhau. Một xác định trình bày, một điều chỉnh khác vào một wall-clock time cụ thể. Vì vậy, bạn có thể có múi giờ ở New Zealand với Locale tiếng Nhật hoặc trong trường hợp này là múi giờ ở Ấn Độ với bản trình bày được định dạng cho người Québécois để đọc.

ZoneId z = ZoneId.of("Asia/Kolkata"); 
ZonedDateTime zdt = ZonedDateTime.now(z); 

Tạo chuỗi bằng cách sử dụng đối tượng định dạng bản địa hóa đó.

String output = zdt.format(f); 

Về java.time

Khung java.time được xây dựng vào Java 8 và sau đó. Các lớp này thay thế các lớp học ngày giờ legacy phiền hà cũ như java.util.Date, Calendar, & SimpleDateFormat.

Dự án Joda-Time, hiện đang ở maintenance mode, khuyên di chuyển đến các lớp java.time.

Để tìm hiểu thêm, hãy xem Oracle Tutorial. Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310.

Nơi lấy các lớp java.time?

Dự án mở rộng ThreeTen-Extra java.time với các lớp bổ sung. Dự án này là một nền tảng chứng minh cho những bổ sung có thể có trong tương lai vào java.time. Bạn có thể tìm thấy một số lớp học hữu ích tại đây như Interval, YearWeek, YearQuartermore.

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