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
'programing' 카테고리의 다른 글
mysql/sysqladb - 테이블 열 인덱스 생성이 작동하지 않습니다. (0) | 2022.10.08 |
---|---|
Laravel whoops 출력에서 .env 비밀번호를 숨기는 방법 (0) | 2022.10.08 |
MySQL에서 저장 프로시저/함수 정의 보기 (0) | 2022.10.08 |
SQL에서 결과를 제외한 OR을 사용하여 쿼리 (0) | 2022.10.08 |
JSON은 Infinity와 NaN을 생략했습니다. ECMAScript에서 JSON 상태는? (0) | 2022.10.08 |