Как получить текущее время не по системе, а из интернета в Java/Kotlin?
Делаю андроид приложение. Есть переменная curTime, туда нужно поместить timestamp по типу 1616572689
и для этого я использовал два метода
val curTime: Long = Date().getTime()
и
val curTime = System.currentTimeMillis()
но проблема в том, что если я на телефоне изменю время, например 2007-ой год, то в curTime будет 2007-ой год, по этому мне нужен метод который возьмет время из интернета как нибудь, помогите кто нибудь, кто знает?
Ответы (1 шт):
Есть такое понятие как NTP протокол. Если взять определение данного вида протоколов с Википедии (например) то можно увидеть такое определение:
NTP (англ. Network Time Protocol — протокол сетевого времени) — сетевой протокол для синхронизации внутренних часов компьютера с использованием сетей с переменной латентностью. Протокол был разработан Дэвидом Л. Миллсом, профессором Делавэрского университета, в 1985 году. Версия на 2015 год — NTPv4
Как вам уже сказали в комментариях - для решения вашей задачи стоит просто обратится к серверу который предоставит вам точное время в мире. Вот например есть такое решение на Github:
SNTPClient.getDate(TimeZone.getTimeZone("Asia/Colombo"), new SNTPClient.Listener() {
@Override
public void onTimeReceived(String rawDate) {
// rawDate -> 2019-11-05T17:51:01+0530
Log.e(SNTPClient.TAG, rawDate);
}
@Override
public void onError(Exception ex) {
Log.e(SNTPClient.TAG, ex.getMessage());
}
});
на выходе вы получите время с сервера. Вот здесь предоставлена документация по TimeManager Android. Вот здесь есть подобный вопрос, но с решением для примера куда копать.