programing

System.current Time Millis()는 UTC 시간을 반환합니까?

sourcetip 2022. 10. 8. 16:33
반응형

System.current Time Millis()는 UTC 시간을 반환합니까?

현재 UTC 시간을 밀리 단위로 알고 싶습니다.구글 검색 결과 System.current Time Millis()가 UTC 시간을 반환한다는 답변을 받았습니다.그렇지 않아요.다음을 수행할 경우:

long t1 = System.currentTimeMillis();
long t2 = new Date().getTime();
long t3 = Calendar.getInstance().getTimeInMillis();

3회 모두 거의 동일합니다(콜에 의한 차이는 밀리초 단위).

t1 = 1372060916
t2 = 1372060917
t3 = 1372060918

이 시간은 UTC 시간이 아니라 제 시간대 시간입니다.현재 UTC 시간을 안드로이드로 어떻게 알 수 있나요?

표시된 세 줄 모두 unix epoch 이후의 시간(밀리초)을 나타냅니다.이것은 로컬 시간대의 영향을 받지 않는 고정 시점입니다.

당신은 "이 시간은 UTC 시간이 아니다"라고 말합니다.실제로 당신은 그것을 잘못 진단한 것 같습니다.epochconverter.com 를 사용하는 것을 추천합니다.예를 들어 다음과 같습니다.

1372060916 = Mon, 24 Jun 2013 08:01:56 GMT

언제 이 값을 생성했는지 알 수 없지만 실제로 UTC 오전 8시 1분이 아니라면 시스템 클럭에 문제가 있습니다.

둘 다 아니다.System.currentTimeMillis그 안에 있는 가치도Date타임 존의 영향을 받습니다.단, 이 점에 유의해 주십시오.Date.toString() 로컬 타임존을 사용하고 있기 때문에, 많은 개발자가, 이 타임존은, 이 타임존을 사용하고 있습니다.Date는 본질적으로 시간대와 관련되어 있습니다.시간대와 관련된 시간대나 달력 시스템이 없는 순간의 시간이 아닙니다.

3개의 이 모두 로컬 시각에 의존할 수 있는 것을 확인할 수 있습니다.이 에폭을 고려하면Date.toString()또는 이와 유사한 방법을 사용합니다.Android 2.3을 실행하는 특정 기기에서 현지 시간에 따라 달라지는 것을 보았습니다.다른 기기나 안드로이드 버전에서는 테스트해 본 적이 없습니다.이 경우 로컬 시간은 수동으로 설정되었습니다.

독립된 UTC 시각을 취득하는 신뢰성 있는 유일한 방법은 를 사용하여 로케이션의 갱신을 요구하는 것입니다.GPS_PROVIDER.그getTime()취득한 로케이션의 값NETWORK_PROVIDER현지 시간에 따라 다르기도 합니다.다른 옵션은 예를 들어 UTC 타임스탬프를 반환하는 서버에 ping을 실행하는 것입니다.

그래서 제가 하는 일은 다음과 같습니다.

public static String getUTCstring(Location location) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    String date = sdf.format(new Date(location.getTime()));
    // Append the string "UTC" to the date
    if(!date.contains("UTC")) {
        date += " UTC";
    }
    return date;
}

언급URL : https://stackoverflow.com/questions/17271039/does-system-currenttimemillis-return-utc-time

반응형