Как получить сегодняшний день не по дате телефона, а по глобальной дате?

Я хочу ввести в своё приложение монеты, которые пользователи получают при входе в приложение 1 раз в день. Но проблема в том, что пользователь может просто изменить дату в телефоне и получать таким образом монетки (с обходом системы). Я хочу сделать так, чтобы пользователь не мог так делать. И как вариант мне приглянулась идея взять дату не с телефона, а вот глобальную (или как она там называется) дату, потому что он не может её изменять. Скажите пожалуйста как взять текущий день не с телефона, а вот глобальную Это в MainActivity

TimeLookup timeLookup;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        NTPUDPClient timeClient = new NTPUDPClient();
        InetAddress inetAddress = InetAddress.getByName(TIME_SERVER);
        TimeInfo timeInfo = timeClient.getTime(inetAddress);
        long returnTime = timeInfo.getReturnTime();
        Date time = new Date(returnTime);
        Log.d("mylog","Time from " + TIME_SERVER + ": " + time);
    }

они подсвечиваются красными и им нужен Exception getByName getTime


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

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

Вот например есть способ:

DateFormat df = DateFormat.getTimeInstance();
df.setTimeZone(TimeZone.getTimeZone("gmt"));
String gmtTime = df.format(new Date());

так же есть и второй вариант, о котором вам сказали в комментарии - брать время извне из какого-то сервиса. Можно использовать NTP (Network Time Protocol). Например, добавляем зависимость:

implementation 'commons-net:commons-net:3.6'

дальше получаем время:

public class TimeLookup {
    public static final String TIME_SERVER = "time-a.nist.gov";

    public static void main(String[] args) throws Exception {
        NTPUDPClient timeClient = new NTPUDPClient();
        InetAddress inetAddress = InetAddress.getByName(TIME_SERVER);
        TimeInfo timeInfo = timeClient.getTime(inetAddress);
        long returnTime = timeInfo.getReturnTime();
        Date time = new Date(returnTime);
        System.out.println("Time from " + TIME_SERVER + ": " + time);
    }

}

вот есть список серверов с которых можно взять время. Но вам стоит учитывать что для этого нужно будет включить интернет.

→ Ссылка