Я хотел бы внести современный ответ. Классы Calendar
, Date
и SimpleDateFormat
, используемые в других ответах, плохо разработаны и, к счастью, устарели.
java.time
ZoneId cinemaTimeZone = ZoneId.of("America/Argentina/Tucuman");
DateTimeFormatter timeFormatter
= DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM)
.withLocale(Locale.forLanguageTag("es"));
LocalDateTime movieStartTime = LocalDateTime.of(2019, Month.APRIL, 2, 8, 30);
ZonedDateTime systemTime = ZonedDateTime.now(cinemaTimeZone);
String displayTime = systemTime.format(timeFormatter);
timeLabel.setText(displayTime);
if (systemTime.isAfter(movieStartTime.atZone(cinemaTimeZone))) {
System.out.println("Movie has started, no more tickets will be sold.");
}
Это отобразит строку типа 8:02:40
в вашем JLabel
(я предположил, что она называется timeLabel
, но вы, конечно, можете изменить это).
Я использую встроенный формат локализованного времени для форматирования времени (без даты). Вы можете контролировать, насколько кратким или многословным формат вам нравится, предоставляя стиль формата FULL
, LONG
, MEDIUM
или SHORT
. И вы управляете культурным стилем, предоставляя язык.
ZonedDateTime.now()
дает нам текущее время, которое мы используем для сравнения со временем начала фильма. Конечно, сравнение должно проводиться в часовом поясе кинотеатра (если вы не хотите, чтобы Америка / Аргентина / Тукуман, разместите что-нибудь еще).
Поскольку я запускал код до 8:30 в этом часовом поясе (время начала фильма), он не печатал Фильм запущен, Если мы запустим его позже, оно будет.
Ссылка: Учебное пособие по Oracle: Дата и время , объясняющее использование java.time.