2015-01-26 3 views
3
나는 날짜로 문자열을 변환하려고

:날짜 시간이 아닌 올바른 값

String dateString = "2015-01-14T00:00:00-04:00"; 
DateTimeFormatter df = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ"); 
DateTime dt = df.parseDateTime(dateString); 

내가 dt.toDate()

내가 얻을 표시하는 경우 : 동부 표준시 23시 00분 0초 2015 1월 13일 화

시간 문제가 있습니다.

DateTimeFormatter이 없으면 동일한 문제가 발생합니다.

+1

어떤 표준 시간대를 사용하고 있습니까? – Christian

답변

1

기본적으로 오전 4시 (UTC 오프셋은 -04 : 00 (원본 텍스트 당)) 또는 전날 오후 11시 (표시된 결과 당) 정확한 값을 얻습니다.

문제는 java.util.Date.toString()입니다. 항상은 시스템 표준 시간대로 날짜를 반환합니다. java.util.Date은 시간대를 나타낼 뿐이며 시간대 자체에 대한 개념이 없기 때문에 toString() 메서드는 시스템 기본값을 사용합니다.

표준 시간대 정보 (또는이 경우 UTC 정보의 오프셋 - 전체 표준 시간대가없는 경우)를 유지하려면 Date으로 변환하는 대신 DateTime을 사용하십시오. 이상적으로는 java.util.Date/java.util.Calendar 전체를 사용하지 마십시오. Joda 시간 및/또는 java.time.*에 충실하십시오.

+0

문제는 일부 junit 테스트를 수행해야합니다. XMLGregorianCalendar의 값과 날짜를 비교해야합니다. 내가 한 일은 문자열을 사용하여 날짜로 변환하고 GregorianCalendar에 영향을 미치지 만이 문제가 발생합니다. –

+0

@roberttrudel : XMLGregorianCalendar가 여기에 들어오는 곳이 어디에도 없습니다. 왜 그럴 수 없습니까? 당신은 값을 비교하기 위해'DateTime'을 생성합니까? 기본적으로 표시 한 모든 코드가 올바르게 작동합니다. 이해해야하고 더 많은 맥락으로 질문을 업데이트해야합니다. –

+0

제시된 첫 번째 단계가 작동하지 않기 때문에 XMLGregorianCalendar가 표시되지 않습니다. –

관련 문제