java .time
Используйте java .time, современный Java API даты и времени для вашей работы с датой и временем. Современный класс для использования вместо старого SimpleDateFormat
- это DateTimeFormatter
.
static DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("MM-dd-yyyy hh:mm a", Locale.ENGLISH);
Редактировать: как сказал в комментарии Василий Бурк, также объявите службу поддержки где-нибудь, где вы можете закрыть ее, когда вы не больше нужно. Например:
static ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Теперь в вашем слушателе действий (или любом другом месте, которое вам может понравиться) вы можете сделать:
} else {
String timeString = "04-01-2020 08:00 AM";
ZoneId zone = ZoneId.of("America/Curacao");
ZonedDateTime timeToExecute = LocalDateTime.parse(timeString, formatter)
.atZone(zone);
long delaySeconds = ChronoUnit.SECONDS.between(
ZonedDateTime.now(zone), timeToExecute);
executor.schedule(() -> System.out.println("It’s now " + timeString),
delaySeconds, TimeUnit.SECONDS);
}
Не забудьте закрыть исполнителя, чтобы освободить ресурсы вызов
executor.shutdown();
Или, если вы хотите отменить уже запланированные задачи, используйте вместо этого shutdownNow()
.
Я установил довольно случайные значения для желаемого времени и часового пояса, поэтому, пожалуйста, введите ваши значения вместо. Если вам нужна настройка часового пояса вашей JVM, опция ZoneId.systemDefault()
является опцией.
Среди многих других преимуществ java .time имеет лучшую поддержку для вычисления продолжительности временного интервала с настоящего момента до желаемого запланированного время. Если вам требуется точность выше, чем вторая, используйте вместо этого миллисекунды, микросекунды или даже наносекунды, то это будет происходить очень похоже (поскольку ваша строка, кажется, имеет только незначительную точность, я не думаю, что это было необходимо).
Упомянутый вами SimpleDateFormat
является печально известным нарушителем класса, вы никогда не будете его использовать. К счастью, он также давно устарел.
Ссылка
Oracle учебное пособие: Дата и время , объясняющее, как использовать java .time.