система.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?
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