java - 如何将 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
,然后立即从中取出内容并尝试将其解析为日期时间。相反,您需要让用户在尝试解析之前在字段中输入日期和时间。
您通常会让用户按下 OK 按钮等,当他/她这样做时,然后继续呼叫getText()
以获取输入的日期和时间。
也就是说,你不应该使用Date
,TimeZone
和SimpleDateFormat
。那些旧的类有设计问题,尤其是最后一个是出了名的麻烦,而且都已经过时了。而是使用LocalDateTime
, ZoneId
and DateTimeFormatter
from java.time, 现代 Java 日期和时间 API。
也不要依赖三个字母的时区缩写,如EST
. 虽然TimeZone.getTimeZone("EST")
可能是确定性的,但我不知道它是给你America/New_York
还是 UTC-05:00,其他读者也不知道。更令人困惑的是,EST 也可能意味着澳大利亚东部标准时间,并且可能还有其他解释。因此America/New_York
,如果那是您的意图,请使用。
链接: Oracle 教程:日期时间解释如何使用java.time
.
推荐阅读
- android - 屏幕旋转时如何加载另一个用户界面?
- python - 没有名为“文件夹名称”的模块
- c# - C# 和 Minecraft 服务器启动
- javascript - 谷歌应用程序脚本在它应该执行时执行两次函数
- c - 使用 VS Code 在 WSL 中调试 C 代码时出现问题
- java - 为什么Android中View.class的所有方法总是抛出异常
- git - 防止 git commit --amend 尝试修改已提交的更改?
- c - C 编译错误:“输入末尾的预期声明或语句”
- gnuradio-companion - 如何暴露qt gui time sink的控制面板?
- javascript - 在 pg-promise API 中动态选择数据库/表