2011-03-11 6 views
1

이 항목에 대한 많은 게시물을 읽었으며 코드 예제를 시도했지만 구문 분석이 제대로 작동하지 않는 것 같습니다.다양한 브라우저의 시간대가있는 DateTime 문자열 구문 분석

내 양식에 dijit DateTextBox가 있습니다. 나는 다른 브라우저에서 사용될 때 날짜 시간의 다른 문자열 반복을받는 것을 알아 챘다. 예를 들어에서 오늘 날짜 :

IE8 :

Fri Mar 11 00:00:00 MST 2011 

모질라/크롬/사파리 :

Thu Mar 11 2011 00:00:00 GMT-0700 (US Mountain Standard Time) 

오페라 :

내 코드에서
Thu Mar 11 2011 00:00:00 GMT-0700 

나는 다음과 같은 SimpleDateFormat의의 생성 :

private final static SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US); 
private final static SimpleDateFormat dateFormat2 = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zZ (zzzz)", Locale.US); 
private final static SimpleDateFormat dateFormat3 = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zZ", Locale.US); 

나는 다음 시도하고 같이 나중에 분석 :

  try { 
       calcDate = dateFormat.parse(changeDate); 
      } catch (ParseException e) { 
       try {     
        calcDate = dateFormat2.parse(changeDate); 
       } catch (ParseException e2) { 
        try { 
         calcDate = dateFormat3.parse(changeDate); 
        } catch (ParseException e3) { 
         e3.printStackTrace(); 
        } 
       } 
      } 

지금까지 유일한 IE8 올바르게 구문 분석합니다. 구문 분석 전에 문자열을 출력하는 문장을 몇 개 만들어 내 형식이 패턴과 일치하는 것처럼 보입니다.

나는 심지어 joda 시간 라이브러리를 설치하고이 같은 예는 몇 가지 노력이 나에게 오류를 제공

String currentDate = "Sun Mar 29 2009 00:00:00 GMT-0700"; 
    DateTimeFormatter formatter = DateTimeFormat.forPattern("EEE MMM dd yyyy HH:mm:ss zZ"); 
    DateTime myDate = formatter.parseDateTime(currentDate); 

'잘못된 형식 ..... GMT-0700이 잘못되었습니다' 제가 뭘 잘못하고 있는지 알려주세요. 감사합니다.

답변

0

이 글을 다시 보았을 때 나는 위에서 언급 한 모든 브라우저에서 작동하는 작업을 생각해 냈습니다.

은 내가 다음 브라우저에서 반환 된 날짜 문자열에서 처음 15 개 문자를했다

private final static SimpleDateFormat dateFormat2 = new SimpleDateFormat("EEE MMM dd yyyy", Locale.US); 

내 두 번째 날짜 형식을 변경하고 이런 식으로 구문 분석 :

  try { 
       calcDate = dateFormat.parse(changeDate); 
      } catch (ParseException e) { 
       try { 
        changeDate = changeDate.substring(0, 15);      
        calcDate = dateFormat2.parse(changeDate); 
       } catch (ParseException e2) { 
        e2.printStackTrace(); 
       } 
      } 

그것은 그것 같이 작동 그럴거야.

두 번째 형식
0

클라이언트 측에서 날짜를 나타내는 문자열을 구문 분석하는 것이 좋습니다. 따라서 서버는 브라우저의 구현에 관계없이 수신 할 형식을 알고 있습니다.

0

,이 시도 :

new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'Z (zzzz)")