根据另一个时区的给定时间检查本地时间

Check Local Time Against Given Time In Another Time Zone

我在使用某些逻辑检查本地系统时间与另一个时区的给定时间时遇到问题。基本上我需要做的就是在联系人列表中获取预定的通话时间和给定的特定时区,并检查系统时间(始终为中部时间)是否等于或晚于给定的预定通话时间时区。

因此时间戳采用这种格式 06-03-2020 19:00:10,并且还会有一个时区,例如 Canada/Newfoundland。我觉得这应该是一个简单的问题,但我无法使其正常工作。以下是目前的方法:

private boolean restrictTimeCheck1(String schedCallTime, String tz) throws Exception {
        System.out.println(String.valueOf(Util.ts()) + ">>> Entering restrictTimeCheck1");
        boolean canCall = false;
        Date now = new Date();
        LocalDateTime ldt = LocalDateTime.ofInstant(now.toInstant(), ZoneId.systemDefault());
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
        Date schedDate = sdf.parse(schedCallTime );
        LocalDateTime schedTime = LocalDateTime.ofInstant(schedDate.toInstant(), ZoneId.of(tz));
        ZonedDateTime zonedSchedTime = schedTime.atZone(ZoneId.of(tz));
        if (ldt.isAfter(zonedSchedTime.toLocalDateTime())) {
            canCall = true;
        }
        System.out.println(String.valueOf(Util.ts()) + "<<< Exiting restrictTimeCheck1: " + canCall);
        return canCall;
      }

非常感谢任何指点。提前谢谢你。

相当简单:

ZonedDateTime scheduledCallTime = LocalDateTime
        .parse("06-03-2020 19:00:10", DateTimeFormatter.ofPattern("dd-MM-uuuu HH:mm:ss"))
        .atZone(ZoneId.of("Canada/Newfoundland"));

ZonedDateTime localSystemTime = ZonedDateTime.now();

System.out.println("Scheduled Call Time: " + scheduledCallTime);
System.out.println("Local System Time: " + localSystemTime);
System.out.println("You're late: " + localSystemTime.isAfter(scheduledCallTime));

输出

Scheduled Call Time: 2020-03-06T19:00:10-03:30[Canada/Newfoundland]
Local System Time: 2020-03-08T15:37:00.836235400-04:00[America/New_York]
You're late: true