Я думаю, что нашел решение.
Когда данные извлекаются, делается следующее ...
editPrefs.putLong("fetchTime", System.currentTimeMillis());
Когда приложение запускается и данные обычно запрашиваются, оно теперь выполняет ..
( Примечание: Страница обновляется ежедневно в «9:00 AEDT» - (восточное летнее время Австралии), и я предполагаю, чтоизменится на AEST (по восточному поясному времени Австралии), когда закончится переход на летнее время. "Australia / ACT" - это часовой пояс, который проходит по этим зонам)
//create calendar date for update threshold based on last fetch time preference
Calendar updateThresh = new GregorianCalendar(TimeZone.getTimeZone("Australia/ACT"));
updateThresh.setTimeInMillis(prefs.getLong("fetchTime", 0));
//increment day if last fetch was >= 9pm of that day
if (updateThresh.get(Calendar.HOUR_OF_DAY) >= 21)
updateThresh.add(Calendar.DAY_OF_MONTH, 1);
//set time to 9:00:00pm
updateThresh.set(Calendar.HOUR_OF_DAY , 21);
updateThresh.set(Calendar.MINUTE , 0);
updateThresh.set(Calendar.SECOND , 0);
//check if current date is before or after
if (updateThresh.before(new GregorianCalendar(TimeZone.getTimeZone("Australia/ACT"))))
{
//update needed (fetch data)
}
else
{
//update not needed (show message)
}
Кажется, это работает нормально.Я проверил его, используя DateFormat, установленный в Australia / ACT, и он, кажется, работает ... например, Создание другого объекта календаря, для которого установлено время выборки, и использование:
DateFormat df = DateFormat.getDateTimeInstance();
df.setTimeZone(TimeZone.getTimeZone("Australia/ACT"));
testTextField.setText("Last fetch in East AU time: " + df.format(fetchTime.getTimeInMillis()) +
"\nUpdate threshold in East AU time: " + df.format(updateThresh.getTimeInMillis()) );
Это показывает, что я всегда правильновывод, даже если я поиграюсь с настройками часового пояса на моем телефоне ... Я вполне уверен, что это решение работает, поэтому я отмечу его как правильное / принятое - но если кто-то заметит ошибку или предложит лучшее предложение, не стесняйтесьделать вклад!:)