Значение ZoneId отличается от временной зоны настройки системы телефона по нескольким причинам:
1. ZoneId представляет временную зону в соответствии со стандартом IANA (Internet Assigned Numbers Authority), который определяет уникальные идентификаторы для временных зон по всему миру. Эти идентификаторы могут различаться от тех, которые используются операционной системой телефона для представления временной зоны.
2. Настройка временной зоны на устройстве может быть изменена пользователем, в то время как ZoneId представляет временную зону, установленную в вашем приложении.
3. Временная зона представляет текущую локацию, в то время как ZoneId - это идентификатор временной зоны, который может не всегда соответствовать текущей локации устройства.
Что касается использования ZoneId.systemDefault().id на эмуляторах Android 8 и Android 9, они могут возвращать неправильный часовой пояс из-за неполной поддержки API для эмуляции времени и часовых поясов. Это может быть проблемой с эмулятором или версией API, которая не полностью совместима с системными часовыми поясами.
Для получения правильного времени вам рекомендуется использовать классы, такие как ZonedDateTime или OffsetDateTime, вместо использования только идентификатора часового пояса. Например:
```java
ZonedDateTime now = ZonedDateTime.now();
```
Это позволит вам получить объект даты и времени, учитывающий правильную временную зону, в рамках которой выполняется ваше приложение.