Program Tip

System.currentTimeMillis ()는 UTC 시간을 반환합니까?

programtip 2020. 10. 5. 20:39
반응형

System.currentTimeMillis ()는 UTC 시간을 반환합니까?


현재 UTC 시간을 밀리 초 단위로 얻고 싶습니다. Google을 검색하고 System.currentTimeMillis ()가 UTC 시간을 반환한다는 답변을 얻었습니다. 하지만 그렇지 않습니다. 다음을 수행하면 :

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

세 번 모두 거의 동일합니다 (호출로 인한 차이는 밀리 초).

t1 = 1372060916
t2 = 1372060917
t3 = 1372060918

이 시간은 UTC 시간이 아니라 내 시간대 시간입니다. Android에서 현재 UTC 시간을 어떻게 얻을 수 있습니까?


표시된 세 줄 모두 현지 시간대의 영향을받지 않는 고정 된 시점 인 유닉스 시대 이후의 밀리 초 수를 제공합니다.

"이번은 UTC 시간이 아닙니다."라고 말합니다. 실제로 잘못 진단 한 것 같습니다. 이를 위해 epochconverter.com사용하는 것이 좋습니다 . 예를 들어, 귀하의 예에서 :

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

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

어느 쪽 System.currentTimeMillis도 아니고 내에서 값 Date자체는 시간대에 따라 달라집니다. 그러나, 당신이 알고 있어야 Date.toString() 않는 A는 생각에 오도 많은 개발자를 지역 시간대, 사용 Date본질적으로 시간대와 관련된 - 그렇지 않은를, 그것은 연관된 시간대 또는 달력 시스템이없는 시간에 그냥 순간,이다.


나는 세 가지 통화가 있음을 확인할 수 있었다 신기원이 아닌 고려 현지 시간에 따라 Date.toString()또는 이와 유사한 방법을. Android 2.3을 실행하는 특정 기기에서 현지 시간에 따라 달라지는 것을 보았습니다. 다른 기기 및 Android 버전에서는 테스트하지 않았습니다. 이 경우 현지 시간은 수동으로 설정되었습니다.

독립적 인 UTC 시간을 얻는 유일한 방법은 .NET Framework를 사용하여 위치 업데이트를 요청하는 것 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

반응형