Вот пример java.time
, который использует ZonedDateTime
, созданный в определенный момент времени, то есть Instant
в упомянутом пакете:
public static void main(String[] args) {
// get a representation of a moment in time (not a specific date or time)
Instant now = Instant.now();
// then use that in order to represent it in a specific zone using an offset of -1 hour
ZonedDateTime utcZdt = ZonedDateTime.ofInstant(now, ZoneOffset.ofHours(-1));
// and use it again in order to have another one defined by a specific time zone
ZonedDateTime laZdt = ZonedDateTime.ofInstant(now, ZoneId.of("America/Los_Angeles"));
// and print the representation as String
System.out.println(utcZdt.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));
System.out.println(laZdt.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));
}
Выходные данные
2020-02-18T14:31:21.714-01:00
2020-02-18T07:31:21.714-08:00[America/Los_Angeles]
В качестве альтернативы вы можете использовать OffsetDateTime
того же пакета.
Ключом является использование Instant
, полученного из эпохи миллиса. Эти значения в миллисекундах также являются моментами времени, независимо от зон или смещений.
Вы кодируете приложение Android, поэтому вам, возможно, придется использовать ThreeTenABP , a Backport почти всей функциональности java.time
для уровней API ниже Android 26.
Я думаю, что в настоящее время использование java.time
или его обратного порта является наименее хлопотным и наиболее простым способом решать задачи, подобные вашей.