У меня есть длинное значение, которое представляет дату-время, подобное этому 20200319234500 (переводится на 19 марта 2020 года, 23:45:00 PM). Я хочу, чтобы это длинное значение (20200319234500) снова преобразовалось в другой часовой пояс в длинном формате, чтобы я мог сделать больше и меньше чем сравнение с текущей датой в местном часовом поясе.
Я хочу делать это эффективно, поэтому мне не нужно создавать какие-либо объекты во время выполнения или создавать строки после запуска. но похоже, что сначала я должен преобразовать долгое время в строку, а затем вызвать функцию ZonedDateTime.parse (), чтобы получить дату и время, а затем провести сравнение. Есть ли другой способ сделать это?
//This is known at compile time
ZoneId baseZone = ZoneId.of("Europe/Paris");
//This is known at compile time
ZoneId localZone = ZoneId.of("America/New_York");
//This is known at compile time
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuuMMddHHmmss").withZone(baseZone);
long baseDateTime = 20210321234500L;
//Dont want o be doing string operations. Is there a way to keep it in long and get another long in a different zone?
ZonedDateTime convertedBaseDateTime = ZonedDateTime.parse(Long.toString(baseDateTime), formatter);
//Can I just get a long that represents current time in local zone? local zone is not JVM zone
ZonedDateTime localDateTime = ZonedDateTime.now(localZone);
//Thats the only operation I want to perform
boolean result = convertedBaseDateTime.isBefore( localDateTime);
ZonedDateTime.isBefore()
принимает во внимание, находится ли другойZonedDateTime
в другом часовом поясе (возможно, преобразование выполняется за кулисами, но вы можете оставить это как есть). - person Ole V.V.   schedule 21.09.2020