CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

如何判别输入的字符串符合日期规范“YYYYMMDDHH”,麻烦各位大虾了。在线等

楼主xuzhike()2005-02-03 12:36:39 在 Java / J2SE / 基础类 提问

如何判别输入的字符串符合日期规范“YYYYMMDDHH”,麻烦各位大虾了。在线等  
  问题点数:0、回复次数:25Top

1 楼xitianjile(空想社會主義)回复于 2005-02-03 12:41:24 得分 0

比如mm准确到要准确到1-12吗?Top

2 楼qybao(阿宝)回复于 2005-02-03 12:53:30 得分 0

you   can   use   calendar   class   to   check   it  
   
  int   yy   =   Integer.parseInt(your_string.substring(0,4));  
  int   mm   =   Integer.parseInt(your_string.substring(4,6));  
  int   dd   =   Integer.parseInt(your_string.substring(6,8));  
  int   hh   =   Integer.parseInt(your_string.substring(8,10));  
  Calendar   c   =   new   GregorianCalendar(yy,mm-1,dd,hh,0,0);  
  if   (c.get(Calendar.YEAR)   !=   yy   ||   c.get(Calendar.MONTH)   !=   mm-1   ||   c.get(Calendar.DAY)   !=   dd   ||   c.get(Calendar.HOUR)   !=   hh)   {  
          return   false;  
  }  
  return   true;Top

3 楼czhhua28(风之子)回复于 2005-02-03 13:05:37 得分 0

同意楼上的Top

4 楼zcjl()回复于 2005-02-03 13:19:54 得分 0

String   date   =   "2005020313";  
  SimpleDateFormat   fmt   =   new   SimpleDateFormat("yyyyMMddHH");  
  fmt.setLenient(false);  
  try   {  
          fmt.parse(date);  
  }   catch   (ParseException   e)   {  
          //不符合日期格式  
          e.printStackTrace();  
  }Top

5 楼yrsheng(以德服人)回复于 2005-02-03 13:26:17 得分 0

String   dateString   =   "2005010213";  
  SimpleDateFormat   sdf   =   new   SimpleDateFormat("yyyyMMddHH");  
  Date   date   =   sdf.parse(dateString);//在此捕捉异常,如果有,则字符串格式不对  
  Top

6 楼darkfly1(飞火)回复于 2005-02-04 15:45:36 得分 0

用正则表达式Top

7 楼cooltigerzsh(阿波罗)回复于 2005-02-04 15:52:39 得分 0

正则表达式  
    function   validateDate(form)   {  
                                var   bValid   =   true;  
                                var   focusField   =   null;  
                                var   i   =   0;  
                                var   fields   =   new   Array();  
                                oDate   =   new   DateValidations();  
                                for   (x   in   oDate)   {  
                                        var   value   =   form[oDate[x][0]].value;  
                                        var   datePattern   =   oDate[x][2]("datePatternStrict");  
                                        if   ((form[oDate[x][0]].type   ==   'text'   ||  
                                                  form[oDate[x][0]].type   ==   'textarea')   &&  
                                                (value.length   >   0)   &&  
                                                (datePattern.length   >   0))   {  
                                            var   MONTH   =   "MM";  
                                            var   DAY   =   "dd";  
                                            var   YEAR   =   "yyyy";  
                                            var   orderMonth   =   datePattern.indexOf(MONTH);  
                                            var   orderDay   =   datePattern.indexOf(DAY);  
                                            var   orderYear   =   datePattern.indexOf(YEAR);  
                                            if   ((orderDay   <   orderYear   &&   orderDay   >   orderMonth))   {  
                                                    var   iDelim1   =   orderMonth   +   MONTH.length;  
                                                    var   iDelim2   =   orderDay   +   DAY.length;  
                                                    var   delim1   =   datePattern.substring(iDelim1,   iDelim1   +   1);  
                                                    var   delim2   =   datePattern.substring(iDelim2,   iDelim2   +   1);  
                                                    if   (iDelim1   ==   orderDay   &&   iDelim2   ==   orderYear)   {  
                                                          dateRegexp   =   new   RegExp("^(\\d{2})(\\d{2})(\\d{4})$");  
                                                    }   else   if   (iDelim1   ==   orderDay)   {  
                                                          dateRegexp   =   new   RegExp("^(\\d{2})(\\d{2})["   +   delim2   +   "](\\d{4})$");  
                                                    }   else   if   (iDelim2   ==   orderYear)   {  
                                                          dateRegexp   =   new   RegExp("^(\\d{2})["   +   delim1   +   "](\\d{2})(\\d{4})$");  
                                                    }   else   {  
                                                          dateRegexp   =   new   RegExp("^(\\d{2})["   +   delim1   +   "](\\d{2})["   +   delim2   +   "](\\d{4})$");  
                                                    }  
                                                    var   matched   =   dateRegexp.exec(value);  
                                                    if(matched   !=   null)   {  
                                                          if   (!isValidDate(matched[2],   matched[1],   matched[3]))   {  
                                                                if   (i   ==   0)   {  
                                                                        focusField   =   form[oDate[x][0]];  
                                                                }  
                                                                fields[i++]   =   oDate[x][1];  
                                                                bValid   =     false;  
                                                          }  
                                                    }   else   {  
                                                          if   (i   ==   0)   {  
                                                                  focusField   =   form[oDate[x][0]];  
                                                          }  
                                                          fields[i++]   =   oDate[x][1];  
                                                          bValid   =     false;  
                                                    }  
                                            }   else   if   ((orderMonth   <   orderYear   &&   orderMonth   >   orderDay))   {  
                                                    var   iDelim1   =   orderDay   +   DAY.length;  
                                                    var   iDelim2   =   orderMonth   +   MONTH.length;  
                                                    var   delim1   =   datePattern.substring(iDelim1,   iDelim1   +   1);  
                                                    var   delim2   =   datePattern.substring(iDelim2,   iDelim2   +   1);  
                                                    if   (iDelim1   ==   orderMonth   &&   iDelim2   ==   orderYear)   {  
                                                            dateRegexp   =   new   RegExp("^(\\d{2})(\\d{2})(\\d{4})$");  
                                                    }   else   if   (iDelim1   ==   orderMonth)   {  
                                                            dateRegexp   =   new   RegExp("^(\\d{2})(\\d{2})["   +   delim2   +   "](\\d{4})$");  
                                                    }   else   if   (iDelim2   ==   orderYear)   {  
                                                            dateRegexp   =   new   RegExp("^(\\d{2})["   +   delim1   +   "](\\d{2})(\\d{4})$");  
                                                    }   else   {  
                                                            dateRegexp   =   new   RegExp("^(\\d{2})["   +   delim1   +   "](\\d{2})["   +   delim2   +   "](\\d{4})$");  
                                                    }  
                                                    var   matched   =   dateRegexp.exec(value);  
                                                    if(matched   !=   null)   {  
                                                            if   (!isValidDate(matched[1],   matched[2],   matched[3]))   {  
                                                                    if   (i   ==   0)   {  
                                                                            focusField   =   form[oDate[x][0]];  
                                                                    }  
                                                                    fields[i++]   =   oDate[x][1];  
                                                                    bValid   =     false;  
                                                              }  
                                                    }   else   {  
                                                            if   (i   ==   0)   {  
                                                                    focusField   =   form[oDate[x][0]];  
                                                            }  
                                                            fields[i++]   =   oDate[x][1];  
                                                            bValid   =     false;  
                                                    }  
                                            }   else   if   ((orderMonth   >   orderYear   &&   orderMonth   <   orderDay))   {  
                                                    var   iDelim1   =   orderYear   +   YEAR.length;  
                                                    var   iDelim2   =   orderMonth   +   MONTH.length;  
                                                    var   delim1   =   datePattern.substring(iDelim1,   iDelim1   +   1);  
                                                    var   delim2   =   datePattern.substring(iDelim2,   iDelim2   +   1);  
                                                    if   (iDelim1   ==   orderMonth   &&   iDelim2   ==   orderDay)   {  
                                                            dateRegexp   =   new   RegExp("^(\\d{4})(\\d{2})(\\d{2})$");  
                                                    }   else   if   (iDelim1   ==   orderMonth)   {  
                                                            dateRegexp   =   new   RegExp("^(\\d{4})(\\d{2})["   +   delim2   +   "](\\d{2})$");  
                                                    }   else   if   (iDelim2   ==   orderDay)   {  
                                                            dateRegexp   =   new   RegExp("^(\\d{4})["   +   delim1   +   "](\\d{2})(\\d{2})$");  
                                                    }   else   {  
                                                            dateRegexp   =   new   RegExp("^(\\d{4})["   +   delim1   +   "](\\d{2})["   +   delim2   +   "](\\d{2})$");  
                                                    }  
                                                    var   matched   =   dateRegexp.exec(value);  
                                                    if(matched   !=   null)   {  
                                                            if   (!isValidDate(matched[3],   matched[2],   matched[1]))   {  
                                                                    if   (i   ==   0)   {  
                                                                            focusField   =   form[oDate[x][0]];  
                                                                      }  
                                                                      fields[i++]   =   oDate[x][1];  
                                                                      bValid   =     false;  
                                                              }  
                                                      }   else   {  
                                                              if   (i   ==   0)   {  
                                                                      focusField   =   form[oDate[x][0]];  
                                                              }  
                                                              fields[i++]   =   oDate[x][1];  
                                                              bValid   =     false;  
                                                      }  
                                            }   else   {  
                                                    if   (i   ==   0)   {  
                                                            focusField   =   form[oDate[x][0]];  
                                                    }  
                                                    fields[i++]   =   oDate[x][1];  
                                                    bValid   =     false;  
                                            }  
                                      }  
                                }  
                                if   (fields.length   >   0)   {  
                                      focusField.focus();  
                                      alert(fields.join('\n'));  
                                }  
                                return   bValid;  
                          }Top

8 楼labrun(labrun)回复于 2005-02-04 17:38:28 得分 0

路上的怎么把javascript也搬出来了?Top

9 楼labrun(labrun)回复于 2005-02-04 17:43:03 得分 0

SimpleDateFormat的parse方法最方便,但是如何使yyyyMMddHH这里面的HH必须是2位数,  
  比如2005020401可以,但200502041就不行呢?Top

10 楼soulcy(棋子)回复于 2005-02-04 18:02:23 得分 0

同意4、5楼Top

11 楼yagumo(八云)回复于 2005-02-04 18:11:55 得分 0

正则表达式,王道.Top

12 楼shan1119(大天使,卐~解!)回复于 2005-02-04 18:30:42 得分 0

ffTop

13 楼86867651(顶怪王)回复于 2005-02-04 18:56:08 得分 0

8错,长见识Top

14 楼cxz7531(大花猫)回复于 2005-02-04 21:09:02 得分 0

最好用捕捉异常  
  import   java.util.*;  
   
  public   class   formular   {  
   
        public   static   void   main(String[]   args)   {  
              System.out.println(isvaliedate("2004022918"));  
        }  
   
        public   static   boolean   isvaliedate(String   timestr)   {  
              if   (timestr.length()   !=   10)  
                    return   false;  
              int   y,   m,   d,   h,   yy,   mm,   dd,   hh;  
              try   {  
                    y   =   Integer.parseInt(timestr.substring(0,   4));  
                    m   =   Integer.parseInt(timestr.substring(4,   6))   -   1;  
                    d   =   Integer.parseInt(timestr.substring(6,   8));  
                    h   =   Integer.parseInt(timestr.substring(8,   10));  
              }   catch   (NumberFormatException   e)   {  
                    return   false;  
              }  
              Calendar   dt   =   Calendar.getInstance();  
              dt.clear();  
              dt.set(y,   m,   d,   h,   0,   0);  
              yy   =   dt.get(Calendar.YEAR);  
              mm   =   dt.get(Calendar.MONTH);  
              dd   =   dt.get(Calendar.DATE);  
              hh   =   dt.get(Calendar.HOUR);  
              if   (dt.get(Calendar.AM_PM)   ==   Calendar.PM)  
                    hh   +=   12;  
              if   (yy   !=   y   ||   mm   !=   m   ||   dd   !=   d   ||   hh   !=   h)   {  
                    return   false;  
              }  
              return   true;  
        }  
  }Top

15 楼fogs(菜鸟想飞)回复于 2005-02-04 21:16:30 得分 0

建议不使用SimpleDateFormat,使用Calendar,很好用Top

16 楼qqbz(qqbz)回复于 2005-02-05 10:29:36 得分 0

得到日期后,你转换为要求的格式不就可以了。Top

17 楼zcjl()回复于 2005-02-05 13:09:02 得分 0

回复人:   labrun(labrun)   (   )   信誉:100     2005-02-04   17:43:00     得分:   0      
     
     
        SimpleDateFormat的parse方法最方便,但是如何使yyyyMMddHH这里面的HH必须是2位数,  
  比如2005020401可以,但200502041就不行呢?  
       
     
  -----------------------  
  我前面的回复中有啊,加上这么一句:  
  fmt.setLenient(false);Top

18 楼zcjl()回复于 2005-02-05 13:09:36 得分 0

回复人:   fogs(菜鸟想飞)   (   )   信誉:100     2005-02-04   21:16:00     得分:   0      
     
     
        建议不使用SimpleDateFormat,使用Calendar,很好用  
       
     
  ------------------------  
  why?请问SimpleDateFormat有什么不妥么?Top

19 楼zcjl()回复于 2005-02-05 13:24:07 得分 0

回复人:   labrun(labrun)   (   )   信誉:100     2005-02-04   17:43:00     得分:   0      
     
     
        SimpleDateFormat的parse方法最方便,但是如何使yyyyMMddHH这里面的HH必须是2位数,  
  比如2005020401可以,但200502041就不行呢?  
       
     
  -----------------------  
  最近老眼昏花,老是看错,真不好意思  
  对于你的要求,setLenient()方法也不行Top

20 楼flyxxxxx()回复于 2005-02-05 13:47:21 得分 0

捕获异常是极其消耗资源的  
  用捕获异常来进行判断是异常的一种错误用法,在这里正确的方法是用正则表达式或自己分析(同样不能用捕获Integer.parseInt()的方式进行,而是应该先看这个字符串是不是全是数字s.char(i)在字符'0'到'9'之间)  
  Top

21 楼cxz7531(大花猫)回复于 2005-02-05 14:11:29 得分 0

to   楼上  
      ------------  
  “捕获异常是极其消耗资源”???我自己编写过异常类,只不过是在特定条件下抛出异常,捕捉后判断是什么原因而已Top

22 楼apollo333()回复于 2005-02-06 23:41:13 得分 0

关注。Top

23 楼away5678(超人Advance)回复于 2005-02-07 12:19:31 得分 0

学到东西Top

24 楼angues1980(石头心)(JSF学习中)回复于 2005-02-07 22:46:02 得分 0

如果是文本框的话,可以用JFormattedTextField一开始就阻止用户输入非法的数值啊!Top

25 楼zdnetchina(天天向上)回复于 2005-02-08 00:52:08 得分 0

studyTop

相关问题

  • 如何输入字符串
  • 关于字符串的输入
  • 如何实现字符串的输入???
  • 输入字符串限制问题
  • 一个输入字符串的问题…………
  • 一个字符串输入的问题
  • 关于字符串的输入
  • 输入字符串的换行问题
  • 随意长度字符串输入
  • 输入字符串转整型?

关键词

  • idelim
  • dateregexp
  • delim
  • odate
  • 字符串
  • orderday
  • yyyymmddhh
  • simpledateformat
  • calendar
  • focusfield

得分解答快速导航

  • 帖主:xuzhike

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo