Tôi đang cố gắng hiểu một số mã SimpleDateFormat. Đặc biệt tôi đang cố gắng sử dụng các chuỗi mẫu được bản địa hóa trong SimpleDateFormat. Từ số javadoc:SimpleDateFormat Lỗi ký tự mẫu không hợp lệ với mẫu được bản địa hóa
SimpleDateFormat cũng hỗ trợ chuỗi mẫu ngày và giờ được bản địa hóa. Trong các chuỗi này, các mẫu chữ được mô tả ở trên có thể được thay thế bằng các chữ cái mẫu, phụ thuộc, ngôn ngữ khác.
Nó cũng xác định một constructor SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)
:
Constructs một cá thể SimpleDateFormat sử dụng mô hình nhất định và những biểu tượng định dạng ngày tháng.
Tuy nhiên, mặc dù getLocalPatternChars()
dụ được trình bày các nhân vật mô hình dự kiến, nhà thầu SimpleDateFormat của đang từ chối mẫu có chứa những ký tự:
public void run() {
Locale loc = new Locale("de", "de");
DateFormatSymbols dfs = new DateFormatSymbols(loc);
String sym = dfs.getLocalPatternChars();
System.out.println(sym);
SimpleDateFormat datefmt = new SimpleDateFormat("tt.MM.uuuu", dfs);
}
sản xuất đầu ra:
GuMtkHmsSEDFwWahKzZ
Exception in thread "main" java.lang.IllegalArgumentException: Illegal pattern character 't'
at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:845)
...
Tôi nhận được cùng một đầu ra nếu Tôi thay thế dòng cuối cùng bằng "... new SimpleDateFormat("tt.MM.uuuu", loc);
".
Mặt khác, nếu tôi tạo một cá thể SimpleDateFormat bằng bất kỳ chuỗi mẫu Anglicized nào, sau đó gọi "applyLocalizedPattern("tt.MM.uuuu")
", mẫu được bản địa hóa được chấp nhận.
Vì vậy, có vẻ như người ta không thể sử dụng chuỗi mẫu được bản địa hóa trong các hàm tạo của SimpleDateFormat và cần khởi tạo hai bước này. Hành vi có chủ ý này?
Hàm tạo không gọi 'translatePattern' (' applyLocalizedPattern' làm điều đó), vì vậy đây là lỗi hoặc một JavaDoc không rõ ràng giải thích cách sử dụng hàm tạo. – Tom
@Tom đúng. Tham số mẫu của hàm tạo chỉ đề cập đến các ký tự mẫu-ngày-thời gian không được tập trung. –
Xem thêm http://stackoverflow.com/a/24128930/2491410 –