一下程序是检查用户的日期输入,如果不是yyyyMMdd,就提示“Please enter the date in YYYYMMDD format.”public class MainTest { public static void main(String[] args) {

String Hdate = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
java.util.Date utilDate = null;
Date hpDate = null;

try {
Hdate = "20100615";
utilDate = sdf.parse(Hdate);
hpDate = new java.sql.Date(utilDate.getTime());

System.out.println(hpDate.toString());
} catch(ParseException e) {
System.out.println("Please enter the date in YYYYMMDD format.");
} catch (Exception e) {
e.printStackTrace();
System.out.println(e);
}
}
}
当:
Hdate = "20100615";  输出结果是:2010-06-15
Hdate = "2010/06/15";  输出结果是:Please enter the date in YYYYMMDD format.奇怪的是,当
Hdate = "2010-06-15";  输出结果是:2009-12-06 (??? 为什么会这样, 改如何修改??)

解决方案 »

  1.   

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      

  2.   

    不行,如果一定要用yyyyMMdd呢?
      

  3.   

    原因是-满足了yyyyMMdd的格式,要求进行运算的时候把-也当做元素了所以你
    Hdate = "2010-06-15"跟Hdate = "2010-06-"效果是一样的,他就取前8位,为什么-满足MM跟dd的格式这个就不知道了,楼主自己去看源代码吧
      

  4.   

    奇怪什么啊!你要求转换的格式就是yyyyMMdd!你输入其他格式是没办法转的!类型不匹配
      

  5.   

    看了半天愣是没看懂你的程序是干什么用的,你前面说的是:“程序是检查用户的日期输入,如果不是yyyyMMdd,就提示“Please enter the date in YYYYMMDD format.” 我没看出来你的程序哪点实现这个需求了
      

  6.   

    To: liuyuhua0066try {
    Hdate = "20100615";
    utilDate = sdf.parse(Hdate);
    hpDate = new java.sql.Date(utilDate.getTime());System.out.println(hpDate.toString());
    } catch(ParseException e) {
    System.out.println("Please enter the date in YYYYMMDD format.");Hdate = "2010/06/15"; 就能捕捉到错误,但如果是Hdate = "2010-06-15";就捕捉不到错误。
      

  7.   

    找到原因了。因为DateFormat默认的解析模式是不严格的。所以它在解析的时候容易出错。可以这样来改就OK了
    sdf.setLenient(false);
    utilDate = sdf.parse(Hdate); 
    把解析模式调成严格的。详情参照API文档:
    setLenient
    public void setLenient(boolean lenient)指定日期/时间解析是否不严格。进行不严格解析时,解析程序可以使用启发式的方法来解释与此对象的格式不精确匹配的输入。进行严格解析时,输入必须匹配此对象的格式。 参数:
    lenient - 为 true 时,解析过程是不严格的
      

  8.   

    看来是SimpleDateFormat类出问题了..........,要解决就修改源码重新编译吧,否则就用其他方式规避这个bug............
      

  9.   

    Jclick 你太强大了!敬仰敬仰啊!
      

  10.   

    如果是JDK5.0,可以考虑使用String.format,例子如下:
    System.out.println(String.format("当前日期:%1$tY年%1$tm月%1$td日 %1$tH:%1$tM:%1$tS", new Date())); 
      

  11.   

    最好的办法就是 先判断位数, 然后判断里面是不是出现非数字字符,然后再用 sdf.parse() 来判断。