Tại sao phân tích cú pháp '23: 00 PM 'với SimpleDateFormat("hh:mm aa")
trả lại 11 giờ sáng?Tại sao phân tích cú pháp '23: 00 PM 'bằng SimpleDateFormat ("hh: mm aa") trả về 11 giờ sáng?
Trả lời
Bạn sẽ nhận được ngoại lệ, vì "23:00 PM" không phải là chuỗi hợp lệ, nhưng cơ sở ngày/giờ của Java là lenient theo mặc định, khi xử lý phân tích cú pháp ngày.
Logic là 23:00 PM là 12 giờ sau 11:00 PM, là 11:00 sáng ngày hôm sau. Bạn cũng sẽ thấy những thứ như "ngày 31 tháng 4" được phân tích cú pháp là "1 tháng 5" (một ngày sau ngày 30 tháng 4).
Nếu bạn không muốn hành vi này, hãy đặt thuộc tính khoan dung thành false trên SimpleDateFormat của bạn bằng cách sử dụng DateFormat#setLenient(boolean) và bạn sẽ nhận được một ngoại lệ khi chuyển vào ngày/giờ không hợp lệ.
Ồ, tôi đã thấy lá cờ đó trước đây, và không bao giờ biết đó là tất cả. : P (cũng không quan tâm đến nó) – OscarRyz
Bạn có ngay bây giờ không? :) –
Tôi đoán rằng nó làm điều gì đó như:
hours = hours % 12;
để đảm bảo rằng giờ đang ở trong phạm vi thích hợp.
Bạn muốn "HH: mm aa" làm định dạng của mình, nếu bạn sẽ phân tích cú pháp thời gian 24 giờ.
public static void main(String[] args) throws ParseException {
SimpleDateFormat df = new SimpleDateFormat("HH:mm aa");
final Date date = df.parse("23:00 PM");
System.out.println("date = " + df.format(date));
}
đầu ra
date = 23:00 PM
SimpleDateFormat df = new SimpleDateFormat ("HH: mm aa"); đang đưa ra cảnh báo lint .. bạn có ý tưởng cách giải quyết vấn đề này không? – NovusMobile
Satyam, cảnh báo là gì? –
Các bạn đã thử HH:mm aa
?
HH
là 24 giờ trong khi hh
là dành cho 12.
23:00 PM có thể được coi là 11:00 vào ngày hôm sau. Javascript và PHP làm việc như thế này khá nhiều nhưng tôi không thể nói cho Java.
Đó là những gì tôi thấy nó đang xảy ra. Yeap! – OscarRyz
Sau đây là các tùy chọn định dạng specifed trong Thông báo javadoc
H Hour in day (0-23)
k Hour in day (1-24)
K Hour in am/pm (0-11)
h Hour in am/pm (1-12)
rằng "h" sẽ là hàng giờ 1-12. Nếu bạn muốn xử lý 1-24, hãy thử "k". 0-23 thử "H". Nhưng tôi sẽ không mong đợi kết quả hợp lệ nếu bạn đang đưa vào dữ liệu không thể.
vâng ... câu hỏi đó thậm chí không có ý nghĩa. đổ rác vào. có lẽ bạn nói đúng là nó thêm 12 giờ trong nội bộ cho 'pm'. – mpen
@Peter: Tôi cũng biết điều đó !! Tôi thực sự phát hiện ra vấn đề là gì sau vài phút. Đó không phải là câu hỏi ở đây. (Bạn đã bao giờ sửa lỗi mã của người khác chưa? Sau đó, nó sẽ có ý nghĩa.) – OscarRyz