Does 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, а это время моего часового пояса. Как я могу получить текущее время UTC в Android?

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

    Вы говорите, что «на этот раз не время UTC» – я подозреваю, что вы на самом деле неправильно поставили диагноз. Для этого я бы предложил использовать epochconverter.com . Например, в вашем примере:

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

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

    Ни System.currentTimeMillis ни значение внутри самой Date не зависят от часового пояса. Однако вы должны знать, что 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; } 
    Intereting Posts
    Android ограничивает количество элементов, отображаемых в раскрывающемся списке счетчика Исключение null-указателя при создании экземпляра контента? CardView выходит поверх FrameLayout, но сначала объявляется Разработка головоломки макета в Android Exoplayer: Как играть аудио через ушную часть? Номер типа ввода, допустимый знак отрицательного или десятичного знака? Службы Google добавили приложение Force close с ошибкой log cat Обработка содержимого gzipped на Android Android: как обнаружить клик на пользовательском элементе SearchView Не удалось импортировать пакеты Session, Request, Response, GraphUser в android Genymotion взаимодействует с сокетом в разных локальных подсетях Правильная конвертация камеры2 YUV_420_888 в JPEG Исключение FirebaseAuthInvalidCredentials при использовании «Одна учетная запись на адрес электронной почты» Как сделать переход приложения Youtube на поиск? При использовании Chrome DevTools приложение Кордовы падает с ошибкой