Как я могу преобразовать входные данные из JTextField в Дата? - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь объединить две программы для создания часов и таймера, который отсчитывает время, пока пользователь не выдаст JTextField (Swing).Когда я запускаю программы отдельно, кажется, что это работает, но когда я объединяю их, я сталкиваюсь с некоторыми проблемами, переводя JTextField в Date.

Я пытался преобразовать JTextField в String сначала, а затем анализирую это как дату, но когда я делаю это, я получаю unparsable date (yyyy-MM-dd hh-mm-ss a).Я знаю, что в коде еще много работы, и он довольно грязный, но я был бы признателен за любую помощь.Вот часть моего кода, содержащая проблему:

JLabel time = new JLabel("Time: ", JLabel.RIGHT);
final JTextField gameDate = new JTextField("yyyy-MM-dd hh:mm:ss", 21);
DateFormat apiFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
apiFormat.setTimeZone(TimeZone.getTimeZone("EST"));
String D = gameDate.getText();
Date dateOfGame = apiFormat.parse(D);
long diff = new Date().getTime() - dateOfGame.getTime();

1 Ответ

0 голосов
/ 03 декабря 2018

Вы создаете текстовое поле, содержащее yyyy-MM-dd hh:mm:ss, затем немедленно извлекаете содержимое из него и пытаетесь проанализировать его как дату-время.Вместо этого вам нужно разрешить пользователю вводить дату и время в поле, прежде чем пытаться выполнить синтаксический анализ.

Обычно вам нужно, чтобы пользователь нажимал кнопку OK или подобное, и когда он / она это делает, затем продолжайтес вызовом getText() для получения введенной даты и времени.

Тем не менее, вы не должны использовать Date, TimeZone и SimpleDateFormat.Эти старые классы имеют проблемы с дизайном, последний, в частности, печально известен своими проблемами, и все они давно устарели.Вместо этого используйте LocalDateTime, ZoneId и DateTimeFormatter из java.time, современного Java-API даты и времени.

Также не используйте трехбуквенное сокращение часового пояса, например EST.Хотя TimeZone.getTimeZone("EST"), вероятно, является детерминированным, я не знаю наизусть, даст ли он вам America/New_York или UTC-05: 00, и другие читатели тоже не будут знать.Чтобы добавить к путанице, EST также может означать Австралийское восточное стандартное время, и могут быть и другие интерпретации.Поэтому используйте America/New_York, если вы намерены это сделать.

Ссылка: Учебное пособие по Oracle: Дата и время , объясняющее, как использовать java.time.

...