Лучше использовать реальный часовой пояс, а не просто смещение +04. Например:
OffsetDateTime currentDateTimeInGeorgia = OffsetDateTime.now(ZoneId.of("Asia/Tbilisi"));
System.out.println(currentDateTimeInGeorgia);
Этот фрагмент просто выводит:
2018-09-13T19: 18: 35,642592 + 04: 00
Пожалуйста, укажите свой часовой пояс. Если вы настаиваете на GMT + 4, используйте ZoneOffset.ofHours(4)
.
Старый класс Date
не может содержать смещение или часовой пояс, но современный OffsetDateTime
делает, как следует из названия. Класс Date
также плохо спроектирован, поэтому рассмотрите возможность использования java.time, современного Java-API даты и времени.
Как видите, вышеприведенное не использует часовой пояс устройства. Если вам все равно это нужно:
ZoneId deviceTimeZone = ZoneId.systemDefault();
System.out.println(deviceTimeZone);
Пример вывода:
Азия / Дубай
Вопрос: Могу ли я использовать java.time на Android?
Да, java.time
прекрасно работает на старых и новых устройствах Android. Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на более новых устройствах Android (от 26 уровня API, как мне сказали) современный API поставляется встроенным.
- В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На более старых (Android) версиях Android используется ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки