如何将来自JTextField的输入转换为日期?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将来自JTextField的输入转换为日期?相关的知识,希望对你有一定的参考价值。
我正在尝试组合两个程序来创建一个时钟和一个倒计时器,直到用户在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();
您正在创建一个包含yyyy-MM-dd hh:mm:ss
的文本字段,然后立即从中获取内容并尝试将其解析为日期时间。相反,您需要让用户在尝试解析之前在字段中输入日期和时间。
您通常会让用户按下确定按钮等,当他/她执行此操作时,然后继续调用getText()
以获取输入的日期和时间。
也就是说,你不应该使用Date
,TimeZone
和SimpleDateFormat
。那些旧班级有设计问题,最后一个特别是出了名的麻烦,而且都很久了。而是使用现代Java日期和时间API java.time中的LocalDateTime
,ZoneId
和DateTimeFormatter
。
也不要依赖像EST
这样的三个字母的时区缩写。虽然TimeZone.getTimeZone("EST")
可能是确定性的,但我不清楚它是否给你America/New_York
或UTC-05:00,其他读者也不会知道。更令人困惑的是,EST也可能意味着澳大利亚东部标准时间,并且可能还有其他解释。所以如果这是你想要的,请使用America/New_York
。
链接:Oracle tutorial: Date Time解释如何使用java.time
。
以上是关于如何将来自JTextField的输入转换为日期?的主要内容,如果未能解决你的问题,请参考以下文章