2013-07-23 24 views
42

Issue: Sử dụng SimpleDateFormat trực tiếp mà không có một miền địa phương rõ ràng Id: SimpleDateFormatSimpleDateFormat (String mẫu, locale Locale) với ví dụ Locale.US cho ASCII ngày

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

Tại sao là "Để có được sử dụng định dạng địa phương getDateInstance(), getDateTimeInstance() hoặc getTimeInstance() hoặc sử dụng SimpleDateFormat (mẫu String, Locale locale) mới với ví dụ Locale.US cho ASCII date "lỗi xuất hiện trên dòng này.

http://developer.android.com/reference/java/text/SimpleDateFormat.html

+1

Đó là cảnh báo không phải là lỗi – Blackbelt

Trả lời

104

Để loại bỏ các cảnh báo chỉ cần thêm Locale.getDefault() như là đối số thứ hai trong khi instantiating đối tượng định dạng ngày tháng. Ví dụ:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", 
        java.util.Locale.getDefault()); 
+0

Cảm ơn bạn đã trả lời! – Si8

+3

Điều gì sẽ xảy ra nếu tôi bỏ qua cảnh báo này? – Deqing

+8

@Deqing Nếu bạn bỏ qua điều này thì trên máy tính có miền địa phương của một quốc gia khác, ngày được trả về từ máy có thể không chứa thông tin dự kiến ​​mà bạn được trả về để khớp với chuỗi được định dạng của bạn. Giống như ',' và '.' ký hiệu về số học trên các hệ thống, thời gian có thể được biểu diễn theo các cách khác nhau giữa các quốc gia và có thể có các thành phần phụ hoặc ít hơn dự kiến. Bằng cách chỉ định bạn chắc chắn sẽ nhận được những gì bạn đang yêu cầu. –

10

cẩn thận về getDefault mặc dù vì nó có thể không phù hợp cho tất cả các trường hợp sử dụng, đặc biệt là đầu ra có thể đọc được bằng máy. Từ số docs:

Ngôn ngữ mặc định không phù hợp với đầu ra có thể đọc được bằng máy. Sự lựa chọn tốt nhất thường là Locale.US - miền địa phương này được bảo đảm có sẵn trên tất cả các thiết bị, và thực tế là nó không có trường hợp đặc biệt đáng ngạc nhiên và thường được sử dụng (đặc biệt là cho giao tiếp máy tính-máy tính) có nghĩa là nó có xu hướng lựa chọn hiệu quả nhất.

+0

Cảm ơn bạn đã tham khảo! – kirtan403

7

Đó là cảnh báo lint câm. Nếu bạn nhìn vào mã nguồn của hàm xây dựng SimpleDateFormat, nó sẽ nhận được ngôn ngữ mặc định.

public SimpleDateFormat(String pattern) { 
    this(pattern, Locale.getDefault()); 
} 

Vì vậy, việc thêm mã vào mã của bạn là thừa và không cần thiết. Locale.getDefault() hầu như luôn là thứ bạn muốn vì đó là những gì thiết bị của người dùng được thiết lập. Nếu vì một lý do nào đó bạn cần nó luôn luôn quay trở lại, ví dụ, "Thứ Hai" bất kể ngôn ngữ của người dùng được thiết lập là gì hơn bạn có thể chỉ định Locale.US nhưng điều đó có vẻ giống như một tình huống hiếm hoi.

Điều tốt nhất cần làm là tắt kiểm tra câm.

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