Как сделать файл доступным для Android-приложения ровно в полночь в соответствии с их часовым поясом - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть сервер, настроенный для часового пояса IST, который GMT + 5: 30, и каждый день новый JSON-файл будет генерироваться с помощью задания Cron.Сгенерированное имя файла будет 1551139200000.json ie.GMT: вторник, 26 февраля 2019 г., 12:00:00.

Как сделать этот файл доступным для Android-приложения только в 12:00 или позже.В настоящее время он может быть доступен для всех часовых поясов, которые не были задействованы в 12:00.В этом случае он должен получить доступ к файлу Json предыдущего дня.

// normal code here.
long fullMsecs = System.currentTimeMillis();
long ist_offset = 330*60*1000;

long filename = (fullMsecs + ist_offset)/86400_000 * 86400_000;
Log.d(TAG, "onCreate:filename" + filename);

// filename would be affixed with required file extension.

PS: эта логика доступна в известном кроссворде, таком как пазл Bonza.В этой игре новая головоломка будет доступна в начале дня, то есть в 12:00.

1 Ответ

0 голосов
/ 26 февраля 2019

java.time и ThreeTenABP

    // Today in user’s time zone
    LocalDate today = LocalDate.now(ZoneId.systemDefault());

    // Today’s file name is epoch millis for 12 AM GMT
    long startOfDayGmt = today.atStartOfDay(ZoneOffset.UTC)
            .toInstant()
            .toEpochMilli();
    String fileName = String.valueOf(startOfDayGmt) + ".json";

    System.out.println("File name: " + fileName);

Вывод при запуске только сейчас - это то, что вы ожидали:

Имя файла: 1551139200000.json

Не делайте вычисления даты и времени вручную, как в вашем вопросе.Это сложнее, чем вы думаете, подвержено ошибкам, трудно читать и поддерживать.java.time, современный Java-интерфейс даты и времени, предлагает очень хорошие возможности для того, что вам нужно.

Вопрос: Могу ли я использовать java.time с Android minSdkVersion 19?

Да, java.время работает хорошо на старых и новых устройствах Android.Для этого требуется как минимум Java 6 .

  • В Java 8 и более поздних версиях и на более новых устройствах Android (начиная с уровня API 26) современный API поставляется встроенным.
  • В Java 6 и 7 получают ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
  • На (более старых) Android используется версия ThreeTen для AndroidBackport.Это называется ThreeTenABP.И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

...