zoukankan      html  css  js  c++  java
  • 时间DateTime的正则表达式(ISO8601)

    public const string DateTime =
    //-------------日期部分是牛人写的,可以判断闰月
                 "^\\s*((((1[6-9]|[2-9]\\d)\\d{2})-(0[13578]|1[02])-(0[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0[469]|11)-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-02-(0[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)[13579][26])-02-29)|(((1[6-9]|[2-9]\\d)[2468][048])-02-29)|(((1[6-9]|[2-9]\\d)0[48])-02-29)|(([13579]6)00-02-29)|(([2468][048])00-02-29)|(([3579]2)00-02-29))" +
    //----------------下面是时间部分,属于我的原创.虽然写的不好,但也可以用了.

                   "(" +   //-->把时间和上面的日期隔开
                           "((T)|(\\s))(" + //-->时间开始 可以为空格 或者T
                                 "([0-1]\\d)|([2][0-4])" + //-->小时
                                 "([:][0-5][0-9]){2}" +    //分,秒,重复2次
                           ")\\s*" +
                 ")?$";   //-->问号表示时间可以为>=1

    支持格式:
    2001-12-31 //一般手写的话,基本上写个年月日,所以这个匹配
    2001-12-31 24:59:59   //DateTime.ToString()的默认输出格式
    2001-12-31T24:59:59//DateTime.ToString("s")输出的ISO8601格式
    当然,前后的空格也是允许的.省的用Tirm函数了.
    不支持:
    2001-1-1   //年和月的0需要不足,不允许缩写
    2001-12-31 1:1:1 //这也是缩写,也不允许.


    如果做到国际上的程序单子,你会被时间搞崩溃,在欧洲国家,时间和我们这不是一样描述的

    所以存入数据库时强烈建议用ISO8601格式(也可以用UTC)

    比如我们的格式,通常为 2008年12月31日,但是有的国家就喜欢使用:2008年31日-12月
    甚至还有的国家喜欢:31日-12月-2008年.甚至还有用AM PM的.

    你拿这种国家没办法,所以可以使用ISO8601格式,适合任何国家.
    在输出时格式化一下就可以了.


    //-----------------------附加日期牛的的解释(如果不想研究直接用就可以了,很乱)
    引用网页:http://www.cnblogs.com/josephshi/archive/2008/04/10/1146582.html

    表达式测试范围为1600到9999年

    ^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|   /*平年闰年1 35 7 8 10 12月*/
        (((1[6-9]|[2-9]\d)\d{2})-(0?[469]|11)-(0?[1-9]|[12]\d|30))|                  /*平年闰年4 6 9 11月*/
        (((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|                /*平年2月*/
        (((1[6-9]|[2-9]\d)[13579][26])-0?2-29)|            /*经过分析只要一个整数的最后两位数能被4整除那么这个数就可以被4整除,于是有了下面五行*/
        (((1[6-9]|[2-9]\d)[2468][048])-0?2-29)|
        (((1[6-9]|[2-9]\d)0[48])-0?2-29)|
        (([13579]6)00-0?2-29)|
        (([2468][048])00-0?2-29)|
        (([3579]2)00-0?2-29))$

    月份天数如果是一位数加不加零都可以的版本:
    ^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[469]|11)-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)[13579][26])-0?2-29)|(((1[6-9]|[2-9]\d)[2468][048])-0?2-29)|(((1[6-9]|[2-9]\d)0[48])-0?2-29)|(([13579]6)00-0?2-29)|(([2468][048])00-0?2-29)|(([3579]2)00-0?2-29))$

    月份天数如果是一位数必须加零的版本:
    ^((((1[6-9]|[2-9]\d)\d{2})-(0[13578]|1[02])-(0[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0[469]|11)-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-02-(0[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)[13579][26])-02-29)|(((1[6-9]|[2-9]\d)[2468][048])-02-29)|(((1[6-9]|[2-9]\d)0[48])-02-29)|(([13579]6)00-02-29)|(([2468][048])00-02-29)|(([3579]2)00-02-29))$

  • 相关阅读:
    java 数组常用排序法
    java stringbuffer二
    java stringbuffer 一
    java string类常用方法二
    java string类及常用方法一
    CS294-112 深度强化学习 秋季学期(伯克利)NO.19 Guest lecture: Igor Mordatch (Optimization and Reinforcement Learning in Multi-Agent Settings)
    CS294-112 深度强化学习 秋季学期(伯克利)NO.18 Advanced imitation learning and open problems
    CS294-112 深度强化学习 秋季学期(伯克利)NO.15 Exploration 2
    CS294-112 深度强化学习 秋季学期(伯克利)NO.14 Exploration 1
    CS294-112 深度强化学习 秋季学期(伯克利)NO.13 Advanced policy gradients
  • 原文地址:https://www.cnblogs.com/liufei88866/p/1377752.html
Copyright © 2011-2022 走看看