如何将输入从JTextField转换为Date?

时间:2018-12-03 13:36:33

标签: java swing date parsing

我正在尝试结合两个程序来创建时钟和计时器,直到用户输入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 :(得分:0)

您正在创建一个包含yyyy-MM-dd hh:mm:ss的文本字段,然后立即从中取出内容并将其解析为日期时间。相反,您需要让用户在尝试解析之前在该字段中输入日期和时间。

通常,您将让用户按下“确定”按钮或类似按钮,然后他/他这样做,然后继续调用getText()以获取输入的日期和时间。

也就是说,您不应使用DateTimeZoneSimpleDateFormat。那些旧类存在设计问题,特别是最后一个类非常麻烦,并且所有类都已过时。而是使用Java.time(现代Java日期和时间API)中的LocalDateTimeZoneIdDateTimeFormatter

也不要依赖于三个字母的时区缩写,例如EST。尽管TimeZone.getTimeZone("EST")可能是确定性的,但我不知道它是否给您America/New_York或UTC-05:00,其他读者也不知道。更令人困惑的是,EST也可能表示澳大利亚东部标准时间,并且可能还有其他解释。因此,如果您要使用America/New_York

链接: Oracle tutorial: Date Time解释了如何使用java.time