如何将来自JTextField的输入转换为日期?

问题描述 投票:-1回答:1

我正在尝试组合两个程序来创建一个时钟和一个倒计时器,直到用户在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();
java swing date parsing
1个回答
0
投票

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

您通常会让用户按下确定按钮等,当他/她执行此操作时,然后继续调用getText()以获取输入的日期和时间。

也就是说,你不应该使用DateTimeZoneSimpleDateFormat。那些旧班级有设计问题,最后一个特别是出了名的麻烦,而且都很久了。而是使用现代Java日期和时间API java.time中的LocalDateTimeZoneIdDateTimeFormatter

也不要依赖像EST这样的三个字母的时区缩写。虽然TimeZone.getTimeZone("EST")可能是确定性的,但我不清楚它是否给你America/New_York或UTC-05:00,其他读者也不会知道。更令人困惑的是,EST也可能意味着澳大利亚东部标准时间,并且可能还有其他解释。所以如果这是你想要的,请使用America/New_York

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

© www.soinside.com 2019 - 2024. All rights reserved.