2009-10-12 9 views
2

명시 적으로 정의되지 않은 경우 날짜 형식을 추측 할 수있는 방법이 있습니까?Java에서 모호한 날짜 구문 분석

예를 들어 사용자가 11Mar09 또는 11-09-09 또는 11-09-09 또는 11-09를 입력하면 try catch 또는 오류 발생없이 Date 개체를 구문 분석하는 가장 좋은 방법은 무엇입니까? ?

+3

2009 년 9 월 11 일인지 11 월 9 일인지를 더 중요한 사실은 어떻게 알 수 있습니까? –

+0

귀하의 의견을 보내 주셔서 감사합니다. 날짜를 특정 형식으로 강요합니다. –

답변

5

내 추천은 입니다.이 아닙니다. 날짜 선택 도구 또는 명시 적으로 명시된 형식을 사용하십시오. 추측은 날짜가 중요한 경우 소송을 포함하여 모든 종류의 문제로 쉽게 이어집니다.

는 추측이 경우, 비 모호한 피드백의 형태를 제공, 확인 페이지 같은 "2009 년이 정확, 귀하의 항공편이 11 월 9 일에 예약 할 것인가?"말한다.

2

일치 항목을 찾을 때까지 정규 표현식을 반복해서 사용할 수 있습니다. 나는 당신도 DateFormats를 가지고 그것들을 순환 할 수 있었고, 실패한 것들에 대해 예외를 잡을 수 있다고 생각한다.

첫 번째 예외는 비 예외적 인 경우에 사용하지 않으며, 두 번째 방법은 설계 시점에 대한 구문 분석 프레임 워크를 사용한다는 점에서 디자인 관점에서 볼 때 더 좋습니다. 그러나 전반적으로, 필자는 어느 쪽의 방법도 필연적으로 "최상의"또는 "최악의"개인적 선호/신념의 문제가 아니라고 생각합니다.

1

가능한 날짜 문자열의 영역이 무한하므로 모든 것을 인식 할 수있는 방법을 알 수 없습니다. 그러나 패턴 일치를 위해 하위 집합을 선택할 수 있습니다.

사용자 인터페이스에 대한 단서는 제공하지 않지만 사용자가 날짜를 입력하는 데 도움을주는 것이 가장 좋습니다. 예를 들어 팝업 캘린더 또는 미리 정의 된 형식을 강요하는 경우.

7

난 당신이 특히 예에 따라,이 작업을 수행 할 수 있다고 생각하지 않지만, 당신이해야하는 경우, 당신의 가장 좋은 방법은 아파치의 DateUtils 같은 것을 사용하는 평민 - 랭 될 것이라고 생각 :

String[] datePatterns = new String[] { 
    "ddMMMyy", // ex. 11Mar09 
    "dd-MM-yyyy", // ex. 11-09-2009 
    "dd/MM/yyyy", // ex. 11/09/2009 
    "dd-MM"  // ex. 11-09 
} 

Date date = DateUtils.parseDate(stringDate, datePatterns); 

불행히도 위의 네 번째와 같은 날짜는 문제가 될 것입니다. - "11/09"9 월 11 일, 11 월 9 일, 9 월 2011 년 11 월, 또는 11 월 11 일입니까?