2016-10-09 5 views
1

FastDateFormat 문자열 "0759"및 "1401"을 구문 분석하려고하는데 ParsingException이 표시됩니다.FastDateFormat 구문 분석 문제

괜찮 으면 SimpleDateFormat으로 작동하지만 스레드 안전하지 않으므로 사용하지 않는 것이 좋습니다. 추가 작업을 수행하기 위해 현재 시간이 특정 시간 프레임 내에 있는지 확인하고 있습니다. 아래 코드 대신 FastDateFormat을 사용하고 싶습니다. FastDateFormat.parse(String) 상태의

try{ 
SimpleDateFormat time_to_string = new SimpleDateFormat("HHmm"); 
     String executionEndTime = time_to_string.format(stepExecution.getEndTime()); 

     Date emailDeliveryStartTime = 
       (Date) time_to_string.parse("0759"); 
     Date emailDeliveryEndTime = 
       (Date) time_to_string.parse("1401"); 
     Date currentSystemTime = (Date) time_to_string.parse(executionEndTime); 

     Calendar calendar1 = Calendar.getInstance(); 
     calendar1.setTime(emailDeliveryStartTime); 

     Calendar calendar2 = Calendar.getInstance(); 
     calendar2.setTime(emailDeliveryEndTime); 

     Calendar calendar3 = Calendar.getInstance(); 
     calendar3.setTime(currentSystemTime); 

     Date isEmailTime = calendar3.getTime(); 

     if (isEmailTime.after(calendar1.getTime()) && isEmailTime.before(calendar2.getTime())) { 
      //return flowexecutionstatus 
     } 
} catch (ParseException ex) { 
     //log message 
} 
+0

는'stepExecution.getEndTime()'에 의해 반환되는 데이터 타입 무엇 :

FastDateFormat time_to_string = FastDateFormat.getInstance(); 

나는 당신이 다음 사용하는 것이 좋습니다까요? – Blip

+0

이것은 일괄 처리 작업입니다. 그래서 stepExecution은 일괄 처리 작업이 끝난 시간을 알려주는 getEndTime() 메소드를 가지고 있습니다. – user3505108

+0

그렇다면 왜 시간을 문자열로 변환하고 다시 시간으로 변환합니까? – Blip

답변

1

자료 문서를 알려 주시기 바랍니다 : DateFormat.parse(String)

와 같습니다.자세한 내용은 DateFormat.parse(String)을 참조하십시오.

지금 DateFormat.parse(String) 상태의 문서 :

는 지정된 캐릭터 라인의 선두로부터 텍스트를 해석해. 메서드는 지정된 문자열의 전체 텍스트를 사용할 수 없습니다.

날짜 분석에 대한 자세한 내용은 parse(String, ParsePosition) 메서드를 참조하십시오.

그리고 parse(String, ParsePosition) 상태의 문서

:

이 구문 분석 작업은 날짜를 생성하는 calendar를 사용합니다. 결과로 서브 클래스 구현에 따라 calendar의 날짜 시간 필드와 TimeZone 값이 이 될 수 있습니다. 모두 setTimeZone을 호출하여 이전에 설정 한 TimeZone 값 을 추가 작업을 위해 복원해야 할 수 있습니다.

그래서, 우리는 위에서 밖으로 만들 수 있습니다 무엇 FastDateFormat.parse(String)는 기본적으로 calendar 객체를 사용하고 그 개체의 날짜 - 시간 필드를 덮어 쓰고 다음에서 Date 객체를 생성하는 것입니다.

그러나 SimpleDateFormat.parse(String)의 작업에는 약간의 차이가 있습니다. 이 parse(String) 방법의 더 우선적는 없지만, parse(String, ParsePostion)은 무시되고 그 documentation 상태 :

이 구문 분석 작업이 날짜를 생산하기 위해 달력을 사용합니다. 구문 분석 전에 모두 달력의 날짜 - 시간 필드가 지워지고 날짜 - 시간 정보가 없으면 달력의 날짜 - 시간 필드의 기본값이 사용됩니다. 예를 들어, 구문 분석 작업에서 연도 값이 으로 지정되지 않은 경우 구문 분석 된 날짜의 연도 값은 1970 년이며 GregorianCalendar를 사용합니다. 지정된 패턴과 텍스트의 표준 시간대 값에 따라 TimeZone 값을 덮어 쓸 수 있습니다 ( ).모두 setTimeZone을 호출하여 이전에 설정 한 TimeZone 값 을 추가 작업을 위해 복원해야 할 수 있습니다. 즉

나는 SimpleDateFormat.parse(String) 그것이 FastDateFormat.parse(String) 당신이 당신의 공급 날짜 시간 문자열 필드 누락대로 구문 분석 할 수 없습니다 누락 된 필드의 기본값을 대체으로 원하는 결과를 제공 할 수 있다고 생각 그것은 대체 할 수 없습니다.

마지막으로 FastDateFormat 변수를 인스턴스화 한 방법을 보여주지 않았지만 당신은 다음과 같이 인스턴스화 한 경우 :

FastDateFormat time_to_string = FastDateFormat.getInstance("HHmm");