我无法将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;
}
答案 0 :(得分:2)
您正尝试使用SimpleDateFormat
格式化String
...
SimpleDateFormat simpleDateFormatMonthDayYear = new SimpleDateFormat("M/d/yyyy");
String stringStartDate = simpleDateFormatMonthDayYear.format(field.getText());
这根本没有意义。您希望parse
将String
值设为Date
您要做的第一件事是parse
String
到Date
的值,这将检查String
格式是否正确。完成后,您需要检查已解析的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
,因为这些可以自动验证文本本身,但这只是我(或来自SwingLabs SwingX库的JXDatePicker
,因为我只是懒惰)
答案 1 :(得分:0)
您没有告诉我们该方法失败的测试。我通常在这样的代码中查找错误的方法是测试,找到失败的测试输入,使用调试器逐步执行它并查看失败的位置。
但是,这是一个提示。我注意到你正在使用" M / d / yyyy"对于格式。这是有问题的,因为有些月份有两位数,有些天有两位数。为什么不使用" MM / dd / YYYY"?