我在将 java 中的日期字段更改为字符串时遇到问题。它在我的输出 toString 中有效,但验证部分无法识别。我的代码有什么问题吗?我不能让用户发布除真实的“M/d/yyyy”日期之外的任何内容,但我的验证不起作用。想法?
我在下面发布了开始日期代码,“结束日期”代码是相同的,但我认为您应该知道它存在。
提前非常感谢。
String stringStartDate = this.txtStartDate.getText();
SimpleDateFormat formatter = new SimpleDateFormat("M/d/yyyy");
Date pStartDate = null;
if (stringStartDate.length() > 0)
{
try {
pStartDate = formatter.parse(stringStartDate);
} catch (ParseException e1) {
e1.printStackTrace();
}
if (pStartDate == null)
{
this.textArea.setText(this.textArea.getText() + "\n"
+ "Error! Please enter a valid start date in the format M/d/yyyy (e.g. 1/2/2015)!");
return;
}
}
else
{
this.textArea.setText(this.textArea.getText() + "\n"
+ "Error! Please enter a valid start date in the format M/d/yyyy (e.g. 1/2/2015)!");
return;
}
这是我的 toString()...它工作得很好。
@Override
public String toString(){
return "Pay Period Start Date = " + simpleDateFormatMonthDayYear.format(this.pStartDate) + "\n"
+ "Pay Period End Date = " + simpleDateFormatMonthDayYear.format(this.pEndDate) + "\n";
}
根据评论和我自己的尝试和错误,我改变了一些事情,但现在都不起作用。这是什么交易?
SimpleDateFormat simpleDateFormatMonthDayYear = new SimpleDateFormat("M/d/yyyy");
String stringStartDate = simpleDateFormatMonthDayYear.format(this.txtStartDate.getText());
Date pStartDate = null;
if (stringStartDate.length() > 0)
{
try {
pStartDate = simpleDateFormatMonthDayYear.parse(stringStartDate);
} catch (ParseException e1) {
e1.printStackTrace();
}
if (pStartDate == null)
{
this.textArea.setText(this.textArea.getText() + "\n"
+ "Error! Please enter a valid start date in the format M/d/yyyy (e.g. 1/2/2015)!");
return;
}
}
else
{
this.textArea.setText(this.textArea.getText() + "\n"
+ "Error! Please enter a valid start date in the format M/d/yyyy (e.g. 1/2/2015)!");
return;
}
最佳答案
您正在尝试使用 SimpleDateFormat
来格式化 String
...
SimpleDateFormat simpleDateFormatMonthDayYear = new SimpleDateFormat("M/d/yyyy");
String stringStartDate = simpleDateFormatMonthDayYear.format(field.getText());
这根本没有意义。您想要将String
值解析
为Date
您要做的第一件事是将String
值解析
为Date
,这将检查是否字符串
的格式正确。完成此操作后,您需要检查解析的 Date
的格式化版本是否等于字段中的文本,以查看该日期是否实际上有效...
SimpleDateFormat simpleDateFormatMonthDayYear = new SimpleDateFormat("M/d/yyyy");
try {
Date date = simpleDateFormatMonthDayYear.parse(field.getText());
if (date != null) {
String formatted = simpleDateFormatMonthDayYear.format(date);
if (!formatted.equals(field.getText())) {
System.out.println("Date is not valid");
}
} else {
System.out.println("Error! Please enter a valid start date in the format M/d/yyyy (e.g. 1/2/2015)!");
}
} catch (ParseException exp) {
System.out.println("Error! Please enter a valid start date in the format M/d/yyyy (e.g. 1/2/2015)!");
}
但我只是使用 JSpinner
或 JFormattedTextField
因为它们可以自动验证文本本身,但这只是我(或来自的 JXDatePicker
SwingLabs SwingX 库,因为我就是那么懒)
关于Java 日期到字符串解析/验证需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29596436/