精华内容
下载资源
问答
  • 首先:判断字符串是不是日期格式,最佳最简便的方法是用time模块里面的strptime尝试将字符串转成格式化时间对象,如果转换成功那么肯定是日期格式,如果转换失败那么肯定不是日期格式。 其次:日期格式有多种多样,...

    需求:

    最近遇到一个朋友问了一个小需求,怎么判断一个字符串是不是日期。

    这个问题看起来很简单,实际上稍加分析会发现里面有很多的坑,真要做出一个功能非常完善的判断函数来并不简单的事情。

    需求分析:

    首先:判断字符串是不是日期格式,最佳最简便的方法是用time模块里面的strptime尝试将字符串转成格式化时间对象,如果转换成功那么肯定是日期格式,如果转换失败那么肯定不是日期格式。

    其次:日期格式有多种多样,必须考虑到各种可能性并将其列入模板加以匹配,多次尝试strptime,这样才能避免错漏。

    第三:如果要判断的字符串中如果含有中文数字,要对其处理,将中文数字转成英文数字。

    代码:

    def isdate(datestr):
        from time import strptime
        from time import strftime
        chinesenum = {'一': '1', '二': '2', '三': '3', '四': '4',
                      '五': '5', '六': '6', '七': '7', '八': '8', '九': '9', '零': '0', '十': '10'}
        strdate = ''
        for i in range(len(datestr)):
            temp = datestr[i]
            if temp in chinesenum:
                if temp == '十':
                    if datestr[i+1] not in chinesenum:
                        strdate += chinesenum[temp]
                    elif datestr[i-1] in chinesenum:
                        continue
                    else:
                        strdate += '1'
                else:
                    strdate += chinesenum[temp]
            else:
                strdate += temp
    
        pattern = ('%Y年%m月%d日', '%Y-%m-%d', '%y年%m月%d日', '%y-%m-%d')
        output = '%Y年%m月%d日'
        for i in pattern:
            try:
                ret = strptime(strdate, i)
                if ret:
                    return strftime(output, ret)
            except:
                continue
        return False
    
    
    datelist = ['2020年11月23日', '2020-11-23',
                '二零二零年十一月二十三日', '二零年十一月二三日', '20年1月5日', '20年01月05日']
    
    for i in datelist:
        print(isdate(i))
    
    out:
    202011232020112320201123202011232020010520200105

    代码讲解:

    代码中比较麻烦的是中文数字转英文,尤其麻烦的是中文数字’十’,当它单独存在时要转成’10’,当它前面没数字后面有数字要转成’1’,当它前面、后面都有数字时要忽视它不转。

    另外若遇到日期二十日写成廿日的,请自行在代码里面添加处理逻辑,这种情况比较少见,暂不加入循环避免影响运行效率。

    partern里面我加了4种常见的字符串日期写法,如果你遇到要处理的日期字符串有别的写法要添加到这里面。

    output里面也是同理,可以根据自己的需求修改日期输出的格式。

    具体日期模板怎么改可以看看我以前写的关于“python之time模块详细梳理”的文章。

    展开全文
  • 判断字符串是不是日期格式

    千次阅读 2016-07-29 16:19:34
    * 判断字符串是不是日期格式 * * @return */ public static String checkDate(String IDCard) throws ParseException{  String errorInfo = "";//错误信息  String[] ValCodeArr = { "1", "0", "X", "9", ...
           /**
    * 判断字符串是不是日期格式
    *
    * @return
    */
    public static String checkDate(String IDCard) throws ParseException{   
      String errorInfo = "";//错误信息   
      String[] ValCodeArr = { "1", "0", "X", "9", "8", "7", "6", "5", "4","3", "2" };   
      String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7","9", "10", "5", "8", "4", "2" };   
      String str = "";
      // ================ 号码的长度 15位或18位 ================   
           if (IDCard.length() != 15 && IDCard.length() != 18) {   
               errorInfo = "身份证号码长度应该为15位或18位。";   
               return errorInfo;   
           }  
           //================ 数字 除最后以为都为数字 ================   
           if (IDCard.length() == 18) {   
            str = IDCard.substring(0, 17);   
           } else if (IDCard.length() == 15) {   
            str = IDCard.substring(0, 6) + "19" + IDCard.substring(6, 15);   
           }   
           if (isNumber(str) == false) {   
               errorInfo = "身份证15位号码都应为数字 ; 18位号码除最后一位外,都应为数字。";   
               return errorInfo;   
           } 
           // ================ 出生年月是否有效 ================   
           String strYear = str.substring(6, 10);// 年份   
           String strMonth = str.substring(10, 12);// 月份   
           String strDay = str.substring(12, 14);// 月份   
           if (isDataFormat(strYear + "-" + strMonth + "-" + strDay) == false) {   
               errorInfo = "身份证生日无效。";   
               return errorInfo;   
           }   
           GregorianCalendar gc = new GregorianCalendar();   
           SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");   
           if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > 150  
                   || (gc.getTime().getTime() - s.parse(   
                           strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) {   
               errorInfo = "身份证生日不在有效范围。";   
               return errorInfo;   
           }   
           if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {   
               errorInfo = "身份证月份无效";   
               return errorInfo;   
           }   
           if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {   
               errorInfo = "身份证日期无效";   
               return errorInfo;   
           } 
           int TotalmulAiWi = 0;   
           for (int i = 0; i < 17; i++) {   
               TotalmulAiWi = TotalmulAiWi   
                       + Integer.parseInt(String.valueOf(str.charAt(i)))   
                       * Integer.parseInt(Wi[i]);   
           }   
           int modValue = TotalmulAiWi % 11;   
           String strVerifyCode = ValCodeArr[modValue];   
           str = str + strVerifyCode;   
     
           if (IDCard.length() == 18) {   
                if (str.equals(IDCard) == false) {   
                    errorInfo = "身份证无效,不是合法的身份证号码";   
                    return errorInfo;   
                }   
            } else {   
                return "";   
            } 
           return "";
    }

    public static boolean isDataFormat(String str){
     boolean flag=false;
     String regxStr="^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$";
     Pattern pattern1=Pattern.compile(regxStr);
     Matcher isNo=pattern1.matcher(str);
     if(isNo.matches()){
      flag=true;
     }
     return flag;
    }

        /**  
         * 判断字符串是否为数字  
         * @param str  
         * @return  
         */  
        private static boolean isNumber(String str) {   
            Pattern pattern = Pattern.compile("[0-9]*");   
            Matcher isNum = pattern.matcher(str);   
            if (isNum.matches()) {   
                return true;   
            } else {   
                return false;   
            }   
        }
    展开全文
  • java判断字符串是否日期格式

    千次阅读 2020-01-04 18:54:17
    public class Demo { public static final String[] patterns = {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy/MM/dd","yyyy/MM/dd HH:mm:... //判断字符串是否日期格式 public static boolean isDate(String p...
    public class Demo {
    
        public static final String[] patterns = {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy/MM/dd","yyyy/MM/dd HH:mm:ss"};
        //判断字符串是否为日期格式
        public static boolean isDate(String param){
            if(param==null)
                return false;
    
            try{
                DateUtils.parseDate(param,patterns);
            }catch (ParseException e){
                return false;
            }
    
            return true;
        }
    
        //判断日期字符串能否正确转换格式
        public static Date isDate(String param, String pattern){
    
            DateFormat format = new SimpleDateFormat(pattern);
    
            if(param==null)
                return null;
    
            try{
                return format.parse(param);
    
            }catch (ParseException e){
                return null;
            }
        }
    
    }
    
    展开全文
  • 输入一个字符串,判断字符串是否日期格式
  • java判断字符串是否日期格式

    万次阅读 2017-05-04 14:57:38
    判断字符串是否日期格式import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 功能:判断字符串是否日期格式 * * @param str * @return */ public static boolean isDate(String ...

    判断字符串是否为日期格式

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    /**
         * 功能:判断字符串是否为日期格式
         * 
         * @param str
         * @return
         */
        public static boolean isDate(String strDate) {
            Pattern pattern = Pattern
                    .compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$");
            Matcher m = pattern.matcher(strDate);
            if (m.matches()) {
                return true;
            } else {
                return false;
            }
        }

    判断字符串是否为数字

    /**
         * 功能:判断字符串是否为数字
         * 
         * @param str
         * @return
         */
        private static boolean isNumeric(String str) {
            Pattern pattern = Pattern.compile("[0-9]*");
            Matcher isNum = pattern.matcher(str);
            if (isNum.matches()) {
                return true;
            } else {
                return false;
            }
        }
    展开全文
  • vb 判断字符串是否日期或时间,在输入框输入任意字符串类型,程序将会判断出该字符串是否是时间字符串,这个判断方法VB员自带有函数,使用IsDate即可实现,下面是使用IsDate的简单用法示例:  If IsDate(Text1) =...
  • 判断字符串是否日期格式,参考博文: https://blog.csdn.net/skyejy/article/details/83217318
  • java 判断字符串是否日期格式

    千次阅读 2018-10-16 10:10:15
    import java.util.regex.Matcher; import java.util.regex.Pattern;... * 功能:判断字符串是否日期格式 * * @param str * @return */ public static boolean isDate(String strDate) { P...
  • 判断字符串是否日期格式

    千次阅读 2011-02-10 15:21:00
    js判断字符串是否日期格式
  • 如果sdf.parse(dateStr)出现异常,说明一定是不符合日期(yyyyMMddHHmmss)格式的字符串, 但是不出现异常不一定是符合日期字符串,比如20191301010101,我们知道,一年中没有第13月,但是SimpleDateFormat会将其...
  • * 验证字符串是否为指定日期格式 * * @param rawDateStr 待验证字符串 * @param pattern 日期字符串格式, 例如 "yyyy-MM-dd" * @return 有效性结果, true 为正确, false 为错误 */ public boolean ...
  • shell字符串转日期,日期转字符串,判断字符串包含某个字符串,删除某个目录下的几天前的日志文件
  • C#判断字符串是否日期格式

    千次阅读 2014-04-23 16:06:27
    本文介绍C#编程时,给定一个字符串,如何判断它是不是一个日期。本文将介绍两种方法,一个是判断字符串是否是时间,如果是就转换为一个时间变量,第二个方法是只作判断。
  • Java判断字符串是否符合yyyyMMdd日期格式 代码: /** * 判断参数的格式是否为“yyyyMMdd”格式的合法日期字符串 * */ public static boolean isValidDate(String str) { try { if (str != .....
  • python判断字符串是否日期格式

    万次阅读 2019-09-27 14:09:43
    今天在做http传参的时候,需要做一个参数校验,其中有一个是字符串类型的时间参数,需要校验它是不是我们规定的时间格式: import datetime def validate(date_text): try: datetime.datetime.strptime(date...
  • public static bool IsDate(string strDate) { Regex reg = new Regex(@"((19|20)[0-9]{2})-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])");... } 可以判断字符串是否是年月日格式,方法返回bool类型的true或false.
  • android 字符串工具类 格式化日期字符串 拼接数组 判断字符串是否为空 转换时间显示 转换文件大小 获取中英文字符个数
  • Java判断字符串是不是时间日期格式

    万次阅读 2019-03-06 10:31:39
    引入jar包: import org.apache.commons.lang3.time.DateUtils; ... private static String[] parsePatterns = {"yyyy-MM-dd","yyyy年MM...调parseDate方法即可判断,需要判断其他格式加到parsePatterns中就行。
  • [code="... * 判断字符串是否为空 * @param value * @return */ public static boolean isEmpty(String value){ if(value == null || "".equals(value)){ retu...
  • 20200131 res为false,可以自动判断日期不合法 QString str = "20111230"; QDateTime date = QDateTime::fromString(str,"yyyyMMdd"); bool res = date.isValid(); if(res) { qDebug() } else { qDebug()...
  • Python|判断字符串是否符合日期要求

    千次阅读 2020-01-29 00:00:00
    欢迎点击「算法与编程之美」↑关注我们!本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。问题描述1.题目要求:输入一串字符,由字母、数字和空格组...
  • js 判断字符串是否符合日期格式

    千次阅读 2020-03-26 14:30:38
    校验格式:YYYY-mm-dd var str='2019-09-20 20:05' if(/^\d{4}-\d{2}-\d{2}$/.test(str)){ alert("格式正确!"); }else{ alert('格式错误') }
  • java判断字符串是否日期类型

    万次阅读 2017-06-22 20:34:53
    public static boolean isDateString(String datevalue, String dateFormat) { if (!hasValue(datevalue)) { return false; } try { SimpleDateFormat fmt = new Si
  • 判断字符串是否日期的正则

    千次阅读 2016-06-29 13:49:33
    String datePattern1 = "\\d{4}/\\d{1,2}/\\d{1,2}"; String datePattern2 = "^((\\d{2}(([02468][048])|([13579][26]))"  + "[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 193,629
精华内容 77,451
关键字:

判断字符串是不是日期