Как получить текущее время не по системе, а из интернета в Java/Kotlin?

Делаю андроид приложение. Есть переменная curTime, туда нужно поместить timestamp по типу 1616572689 и для этого я использовал два метода

val curTime: Long = Date().getTime()

и

val curTime = System.currentTimeMillis()

но проблема в том, что если я на телефоне изменю время, например 2007-ой год, то в curTime будет 2007-ой год, по этому мне нужен метод который возьмет время из интернета как нибудь, помогите кто нибудь, кто знает?


Ответы (1 шт):

Автор решения: Andrew

Есть такое понятие как 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. Вот здесь есть подобный вопрос, но с решением для примера куда копать.

→ Ссылка