Календарная дата отличается

Почему Calendar в Android дают разные даты на разных устройствах Android? Я получил локаль по умолчанию, и у меня все та же проблема.

Код:

calendar = Calendar.getInstance();
currentDate = DateFormat.getDateInstance(DateFormat.DATE_FIELD,Locale.getDefault())
    .format(calendar.getTime());

1 ответ

Почему Календарь в Android дает разные даты на разных устройствах Android?

  1. Calendar.getInstance использует системные часы, поэтому, если часы разных устройств установлены по-разному, вы получите разное время.
  2. Ваш формат даты использует часовой пояс JVM по умолчанию (который не имеет ничего общего с локалью). Поскольку это не всегда одна и та же дата во всех часовых поясах, вы должны получать разные даты (даже если системные часы правильно установлены на текущее время).

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

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

Да, java.time прекрасно работает на старых и новых устройствах Android. Это просто требует как минимум Java 6.

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

связи

Другие вопросы по тегам