2010-08-17 3 views
0

서버 UTC 시간에서 로컬 시간을 가져 오려고합니다. 나는 서버의 UTC 시간 형태를 얻었고, 그것이 캘리포니아 또는 중국에 있든 상관없이 각각의 개별 안드로이드 폰에 맞게 만들고 싶다.UTC 시간을 전화로 변환 현지 시간

이것은 내가 지금 사용하고있는 코드입니다. 그러나 이것은 작동하지 않습니다.

내가 서버에서 얻을 시간은

"2010-08-17 19:41:13.0" 

입니다 그리고 난 (초) 차이를 얻기 위해 사용하는 코드는 다음과 같습니다 :

public static long getSecondsDifference(Timestamp timeStamp) { 
    final Calendar calendar = Calendar.getInstance(Locale.getDefault()); 

    int refrenceOffset = TimeZone.getDefault().getOffset(timeStamp.getTime()); 

    final long referenceSeconds = (timeStamp.getTime() + refrenceOffset)/1000; 
    final long currentTimeSeconds = (calendar.getTimeInMillis())/1000; 

    final long differenceMinutes = (currentTimeSeconds - referenceSeconds)/60; 

    return differenceMinutes; 
} 

타임 스탬프는 자바에서입니다. sql.timestamp 패키지. 내가

현재 시간 11:50 오전 - 그리고 방법은 일광과해야 할 일을했을

+0

각 단계마다 각 값을 검사합니다. 뭔가 당신이 생각하는 것이 아닙니다. – John

답변

1

(그래서 분명 뭔가 잘못 :) 일) 지정된 서버 시간 -53 분 전입니다 반환 저금. 내가 살고있는 태평양 표준시 (Pacific Daylight Time) 이후로 나는 보상해야합니다.

public static long getSecondsDifference(Timestamp timeStamp) { 
    final Calendar calendar = Calendar.getInstance(Locale.getDefault()); 

    int offset = TimeZone.getDefault().getOffset(timeStamp.getTime()); 

    if (TimeZone.getDefault().inDaylightTime(Calendar.getInstance().getTime())) { 
     offset = offset - TimeZone.getDefault().getDSTSavings(); 
    } 
    final long referenceSeconds = (timeStamp.getTime() + offset)/1000; 

    final long currentTimeSeconds = (calendar.getTimeInMillis())/1000; 

    final long differenceSeconds = (currentTimeSeconds - referenceSeconds); 

    return differenceSeconds; 
} 
관련 문제