2015-07-21 1 views
1

Итак, это может быть базовым, но, к сожалению, я еще ничего не нашел, чтобы помочь с этим.Получить точное время UTC в Android

Я бы хотел, чтобы определенные функции выполнялись только в Android в течение периода времени, характерного для UTC/GMT Time.

Как вы это делаете? Я попытался использовать System.currentTimeMillis(), но если вы измените время на Android-устройстве в настройках, это также изменит System.currentTimeMillis().

Я хотел бы получить время, равное UTC/GMT и не зависит от настроек Android Device Settings, поэтому, если часы изменены на устройстве, это не будет мешать.

Любые мысли?

Спасибо! Christopher Steven

+0

You может попробовать следующее: http://stackoverflow.com/questions/308683/how-can-i-get-the-current-date-and-time-in-utc-or-gmt-in-java/6697884#6697884 –

+0

@cgomezmendez благодарит за предложение, но, к сожалению, оно не работает; Я просто протестировал его в примерном приложении ... Если вы измените время устройства, это также изменится. – chocospaz

+0

Это: [Google-sntpClient-fetch utc из Интернета] (http://stackoverflow.com/questions/14771223/get-utc-date-from-web-in-android-application) –

ответ

0

Вам необходимо служба времени из Интернета. вы можете получить в режиме реального времени от сервера времениNIST

apache-commons имеет TimeInfo класс, чтобы получить NTP Дата

Пример: NTPClient

2

time.nist.gov является вашим другом, если вы хотите действительно точное время. *

(обязательно связывать все это в потоке, если вы работаете на Android!)

Одна вещь, которую я хотел бы сделать, это взять разницу между временем сервера и системное время и сохранит для будущее использование. Короче говоря, до тех пор, пока системное время не используется, вам не нужно выполнять несколько вызовов времени. Вы можете просто взять системное время и изменить его на основе разницы.

* вам понадобится сообщество apache, чтобы это работало.

+0

Спасибо за идею! В какой-то момент я знаю, что мне нужно сделать запрос на бэкэнд, я могу передать серверу время сервера в одном из своих заголовков, сохранить это и сравнить его с истекшим временем – chocospaz

0

System.nanoTime() возвращает количество наносекунд с момента запуска и поэтому не может быть подвержен изменениям системных часов.

При использовании запуска:

long startTime = System.TimeInMillis(); 
long nanoToDeduct = System.nanoTime(); 

Тогда в любой момент времени вы можете получить текущее время программы, как часы были установлены при запуске программы с

long currentTime = startTime - timeToDeduct + System.nanoTime();