2017-04-19 2 views
-2

백엔드에서 UTC 시간을 일부 생성하고 웹 소켓을 사용하여 Android 애플리케이션으로 보냅니다.Java JodaTime의 시간대 정보가 잘못되었습니다.

문제는 다음과 같습니다. 날짜를 표시 할 때 내 전화가 +3 시간대에 있다고 가정하기 때문에 3 시간 뒤입니다.

아래는 백엔드 코드와 Android 코드 모두에서 발췌 한 것입니다. 이 내가 그것을 처리하고 어떻게 내 안드로이드 응용 프로그램에서

let d = moment.utc().toISOString(); 

:

String sendDate = "2017-04-19T15:41:36.758Z"; //this is an example server response 
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
dtf.parseLocalDateTime(sendDate).toDate() 

문제는

백엔드 코드 (나는 순간 라이브러리를 사용하여 UTC 날짜를 생성하고 어떻게입니다) UTC 날짜가 전화가 현재있는 시간대로 올바르게 표시되거나 변환되지 않으므로 날짜가 항상 3 시간 늦어집니다.

무엇이 누락 되었습니까?

+0

당신은 휴대 전화의 기본'TimeZone' ('DateTimeZone.getDefault()'의 결과를) 확인해 봤어? –

+0

그리고 예상 출력과 비교할 때 출력은 어떻게됩니까? –

+1

'dtf.parseLocalDateTime (sendDate) .toDate (DateTimeZone.UTC)'를 사용해보십시오. 왜냐하면 인수없이 toDate()가 암시 적으로 시스템 시간대 (Joda-Time 데이터 포함)를 사용하기 때문입니다. 그리고 당신의'LocalDateTime'은 분명히 UTC 입력을 기반으로합니다 ... –

답변

0

해결 방법은 toDate() 메서드의 시간대를 지정하는 것입니다.

dtf.parseLocalDateTime(sendDate).toDate(DateTimeZone.UTC.toT‌​‌​imeZone())

관련 문제