2012-05-15 39 views
6

Tôi cần phải phân tích cú pháp ngày tháng từ chuỗi đầu vào sử dụng mẫu ngày "yyyy-MM-dd" và nếu ngày sẽ có định dạng khác, hãy báo lỗi.Phân tích cú pháp ngày không chính xác bằng SimpleDateFormat, Java

Đây là mảnh của tôi về mã nơi tôi phân tích ngày:

private void validateDate() throws MyException { 
    Date parsedDate; 
    String DATE_FORMAT = "yyyy-MM-dd"; 
    try{ 
    parsedDate = new SimpleDateFormat(DATE_FORMAT).parse(getMyDate()); 
    System.out.println(parsedDate); 
    } catch (ParseException e) { 
    throw new MyException(“Error occurred while processing date:” + getMyDate()); 
    } 

} 

Khi tôi có chuỗi như "2011/06/12" như đầu vào trong mydate tôi sẽ nhận được đầu ra "Thu ngày 29 tháng 9 00:00 : 00 EEST 2011 ", điều này rất tốt.

Khi tôi gửi một chuỗi không chính xác như “2011-0612”, tôi sẽ gặp lỗi như mong đợi.

Sự cố bắt đầu khi tôi đang cố chuyển một chuỗi vẫn có hai dấu gạch nối "", nhưng số chữ số sai. Ví dụ:

chuỗi đầu vào “2011-06-1211” kết quả "Tue Sep 23 00:00:00 EEST 2014".

chuỗi đầu vào “2011-1106-12” kết quả "Mon Feb 12 00:00:00 EET 2103".

Tôi không thể thay đổi định dạng đầu vào của ngày chuỗi.

Làm cách nào để tránh?

+1

Tôi không chắc chắn cách "2011-06-12" làm đầu vào trong myDate Tôi sẽ nhận được kết quả "Thu Sep 29 00:00:00 EEST 2011" là tốt. Bạn sẽ nhận được ngày 12 tháng 6 là đầu ra - không phải ngày 29 tháng 9 ... –

Trả lời

9

Bạn đã thử gọi setLenient(false) trên SimpleDateFormat của mình chưa?

import java.util.*; 
import java.text.*; 

public class Test { 

    public static void main(String[] args) throws Exception { 
     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
     format.setLenient(false); 
     Date date = format.parse("2011-06-1211"); // Throws... 
     System.out.println(date); 
    } 
} 

Lưu ý rằng tôi cũng khuyên bạn nên đặt múi giờ và miền địa phương của SimpleDateFormat. (Hoặc, hãy sử dụng Joda Time để thay thế ...)

+0

Cảm ơn bạn đã trả lời. Tôi sẽ chạy các bài kiểm tra và cung cấp cho bạn phản hồi. Nhưng tại thời điểm này có vẻ như vấn đề được giải quyết. – AndrewVP

+0

Trong simpleDateFormat, nó luôn trả về sai tháng. Lý do của nó là gì? –

+0

@AnandSavjani: Không. Tôi không thể nói những gì bạn đang làm sai với rất ít thông tin, nhưng 'SimpleDateFormat' hoạt động khá hợp lý. Nếu bạn nghĩ rằng nó bị hỏng, tôi đề nghị bạn đặt một câu hỏi mới với một chương trình ngắn nhưng đầy đủ cho thấy vấn đề. –

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