система.currentTimeMillis () возвращает время UTC?



Я хочу, чтобы получить текущее время в формате UTC в миллисе. Я искал google и получил некоторые ответы на эту систему.currentTimeMillis () возвращает время в формате UTC. но это не так. Если я делаю следующее:



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


все три раза почти одинаковы (разница в миллисекундах из-за вызовов ).



t1 = 1372060916
t2 = 1372060917
t3 = 1372060918


и это время не время UTC вместо этого это мое время часового пояса. Как я могу получить текущее время UTC в android?

746   2  

2 ответов:

все три строки, которые вы показали, дадут количество миллисекунд с эпохи unix, которая является фиксированной точкой во времени, не зависящей от вашего местного часового пояса.

вы говорите: "на этот раз не время UTC" - я подозреваю, что вы на самом деле диагностировали это неправильно. Я бы предложил использовать epochconverter.com за это. Например, в вашем примере:

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

мы не знаем, когда вы создали это значение, но если это не было на самом деле в 8: 01 утра UTC, это проблема с системными часами.

ни System.currentTimeMillis, ни в зависит от часового пояса. Однако вы должны знать, что Date.toString()тут использует местный часовой пояс, который вводит в заблуждение многих разработчиков, думая, что Date по своей сути связан с часовым поясом-это не так, это просто мгновение во времени, без связанного часового пояса или даже календарной системы.

Я могу подтвердить, что все три звонка может зависит от местного времени, учитывая эпоху, а не Date.toString() или любой подобный способ. Я видел, как они зависят от местного времени в конкретных устройствах под управлением Android 2.3. Я не тестировал их с другими устройствами и версиями android. В этом случае местное время было установлено вручную.

единственный надежный способ получить независимое время UTC запрашивает обновление местоположения с помощью GPS_PROVIDER. Элемент getTime() значением местоположения извлечено из NETWORK_PROVIDER также зависит от местного времени. Другой вариант-ping сервер, который возвращает метку времени UTC, например.

Итак, я делаю следующее:

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;
}

Comments

    Ничего не найдено.