Có một ý nghĩa (! Ngược không tương thích) sự thay đổi trong cách các tên tháng được khoanh vùng trong Java 7 và Java 8.
này liên quan đến java.time API mới (Tutorial) được giới thiệu bởi Java 8. API (khá hợp lý) phân biệt hai hình thức khác nhau của một tên tháng, theo quy định của java.time.format.TextStyle
enum:
- độc, đại diện cho mo tên thứ n. Nó tương ứng với "đề cử" trong nhiều ngôn ngữ.
- Chuẩn, thường được sử dụng bên trong các biểu diễn ngày đầy đủ. Điều này tương ứng với "genitive".
Biến thể mặc định cho trình định dạng ngày là "chuẩn", điều này cũng có vẻ hợp lý, vì trình định dạng thường được sử dụng để tạo ngày hoàn chỉnh. Thật không may, điều này dẫn đến một sự thay đổi trong hành vi (ít nhất là đối với một số ngôn ngữ) giữa Java 7 (được sử dụng để tạo ra các tên độc lập) và Java 8 (tạo ra một tên "chuẩn").
Có thể yêu cầu một cách rõ ràng biểu mẫu độc lập/đề cử bằng cách sử dụng liệt kê TextStyle
nêu trên. Thật không may, điều này làm cho mã của bạn phụ thuộc vào Java 8 hoặc cao hơn.
bản demo nhanh:
import java.time.Month;
import java.time.format.TextStyle;
import java.util.Locale;
for (TextStyle ts : TextStyle.values()) {
System.out.print(ts + ": ");
System.out.print(Month.OCTOBER.getDisplayName(ts, Locale.ENGLISH) + "/"); // English
System.out.print(Month.OCTOBER.getDisplayName(ts, Locale.forLanguageTag("cs")) + "/"); // Czech
System.out.print(Month.OCTOBER.getDisplayName(ts, Locale.forLanguageTag("ru")) + "/"); // Russian
System.out.println(Month.OCTOBER.getDisplayName(ts, Locale.forLanguageTag("pl"))); // Polish
}
nào in:
FULL: October/října/октября/października
FULL_STANDALONE: 10/říjen/Октябрь/październik
SHORT: Oct/Říj/окт/paź
SHORT_STANDALONE: 10/X/Окт./paź
NARROW: O/ř/О/p
NARROW_STANDALONE: 10/ř/О/p
Tôi không biết về bất kỳ cách dễ dàng để có được những hình thức độc lập sẽ được làm việc theo cả hai Java 7 và Java 8. Tại ít nhất là không phải trong Java thuần túy - tất nhiên, có một số cách phức tạp và dễ vỡ hơn, như cố gắng phát hiện phiên bản Java hoặc sử dụng một số thư viện của bên thứ ba.
Phần lớn chức năng java.time được chuyển về Java 6 & 7 trong [* ThreeTen-Backport *] (http://www.threeten.org/threetenbp/). Điều chỉnh thêm cho Android trong dự án [* ThreeTenABP *] (https://github.com/JakeWharton/ThreeTenABP). –