2015-02-06 2 views
3

나는이 같은 포맷 내 일에 대한 정확하고 깨끗한 작업 솔루션을 찾을 수 없습니다 :이 특정 날짜를 올바르게 구문 분석하려면 어떻게해야합니까?

2014-06-09T00 : + 0200 01

(여기에 6 월 9 일)

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmXXX", Locale.ENGLISH); 

이 그냥 나에게 해석 할 날짜 예외를 제공합니다 : I 시도

마지막이이었다. 내가 무엇을 바꾸어야한다고 생각하니?

답변

3

,

System.out.println(s.format(s.parse(dateTimestr))); 

자바 8 사용

String dateTimestr = "2014-06-09T00:01+0200"; 
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ"); 
s.parse(dateTimestr); 

인쇄, ZXXX 대체

문자열이 ISO8601 날짜 형식 인 경우에만 OffsetDateTime.parse이 작동합니다. 날짜가 다른 형식으로되어 있다면 DateTimeFormatter을 사용하여 OffsetDateTime.parse()에 적절한 포맷터를 제공해야합니다. 01 + 02 : Z 대신 XXX 또는 XX를 사용하여 사용 00

(2 X의) 받아 들여야 즉

OffsetDateTime.parse(yourStringDate, DateTimeFormatter formatter) 
2

사용 Z 대신 XXX 또는 하나 documentation에서 X

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ", Locale.ENGLISH); 

:

Z 시간대 RFC 822 시간대 -0800

X 시간대 ISO 8601 표준 시간대 - 08; -0800; -08 : 00

0

문제는 XXX입니다 콜론과 시간대 형식, 즉, 2014-06-09T00이 필요 콜론이없는 형식

일부 X가 게시 된 것처럼 사용하면 시간대의 마지막 두 자릿수 (예 : 2014-06-09T00 : 01 + 02)가 무시되므로주의하십시오. 시간대 오프셋이 +05 : 30 인 인도와 같은 일부 국가에서 시간대를 사용하는 경우 문제가 될 수 있습니다. 다음 코드를 참고하십시오.

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mmXXX").format(new SimpleDateFormat("yyyy-MM-dd'T'HH:mmX").parse("2014-06-09T00:01+05:30"))); 

2014-06-08T14 : 01-05 : 00으로 인쇄됩니다. 해당 시간대의 30 개가 하나만 사용되면 잃었습니다. Documentation

관련 문제