0

在以下代码输入中:

Enter Date: 3/2/2011

输出:

Entered Date is February 3, 2011
Entered Month is 02

问题是,当我输入这个日期3/14/2012时,日期格式功能会自动将月份更改为12+2二月)。如果我把13/15/2011,它会改变月份3(12+3)

它应该在14那个“无效月份”上给出一个错误

package lesson4;

import java.util.*;

import java.text.*;
public class ConvertDate {
static String Month;
static String fulldate;
static int month;
static  int[] montharray={1,2,3,4,5,6,7,8,9,10,11,12};
public static void main(String[] args){


Scanner sc = new Scanner(System.in); 
System.out.print("Enter Date: "); 
String ind = sc.nextLine(); 
//Date now = new Date();
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat f = new SimpleDateFormat("dd");
SimpleDateFormat m = new SimpleDateFormat("MM");

Date d = null;
    Date e=null;
Date g=null;


try {
d=df.parse(ind);
e=df.parse(ind);
g=df.parse(ind);
DateFormat df3 = DateFormat.getDateInstance(DateFormat.LONG);


 fulldate = df3.format(d);
 Month=m.format(g);
month =Integer.parseInt(Month);

String date  =f.format(e);
 } catch (ParseException e1) {
// TODO Auto-generated catch block



e1.printStackTrace();
}





System.out.println("The entered date is: " + fulldate);
System.out.println("The entered month is: " + Month);

}
}
4

3 回答 3

4

对于您的每个DateFormat实例,您需要setLenient使用 false 参数调用:

DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
df.setLenient(false);
DateFormat f = new SimpleDateFormat("dd");
f.setLenient(false);
DateFormat m = new SimpleDateFormat("MM");
m.setLenient(false);

DateFormat#setLenient(boolean)文档:

通过宽松的解析,解析器可以使用启发式方法来解释不精确匹配该对象格式的输入。使用严格的解析,输入必须匹配这个对象的格式。

于 2013-08-02T07:25:13.240 回答
2

参考这些格式Java 日期格式文档

日期时间格式

DateFormat df = new SimpleDateFormat("dd/MM/yyyy");

您期望 Month 排在第二位,而 input 将其排在第一位。

尝试:

DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
于 2013-08-02T07:21:49.933 回答
0

您是否尝试过在 DateFormat 上使用“setLenient(false)”来强制 DateFormat 对已解析的输入严格要求?我还没有尝试过,但最近偶然发现了这个功能。

于 2013-08-02T07:25:51.013 回答