Java自定义字符串符合SimpleDateFormat标准日期输出格式的检测工具类

问题背景

公司最近出啦个新的需求:开发一个单号集中生成中心,就是单号自动生成的一套规则,而且是用户可以自定义参与制定编号规则的。既然是自定义单号规则,有两点是很重要的:1,单号的可读性,也就是看到这个单号就可以知道这是那种单据的单子在什么时候创建的。2,可自定义性,就是说有些内容是允许客户在规则之内自定义的。本菜在制定规则的时候暂把规则制定为:XXX{YYMMdd}{3D},分解出来的:"XXX"代表前缀用户可以自定义可以根据这个查询单据类型,这个没毛病。“{3D}”表示后缀是由三位数字组成保持单号的唯一性。“{YYMMdd}"这个表示日期用户可以根据这个知道建单时间,但麻烦也出在这里。组内大佬提出,日期格式是可以由客户任意变化的,也就是说用户可以随意输入符合规定的日期格式形式。用户输入是具有不确定性的,所以我们必须要有一个规则来判断出用户输入的是否合理。由此…

难点

我们开发不知道用户输入的到底是个啥!(比如用户输入:XXX{ymd}{3D}),XXX{ddmmyy}{4D}… ,而且由于数据库表和其他数据是一起混用的,所已并没有特定的数据结构,来定位单号组成的类型。在数据库中都是以一个字符串形式存储。所以在生成单号的时候我们只能使用正则切分按“{”来切分各字段,还有这几种规则形式是可以自由组合的。所以说你根本不值到你要生成的单号需不需要生成含日期格式的,必须循环逐个检查。

解决方法1:最笨的方法也是最有效的方法

将所有符合日期格式的字符串的正则表达是一一列举,一一检查,这个工作量太大。本菜想啦想就放弃啦,有兴趣的小伙伴可以去收集下(收集完记得分享一波)

解决方法2:使用Exception

总所周知要得到真正的日期,除啦日期格式之外,还需要个日期转换的类:SimpleDateFormat 这是最常用的,虽然线程不安全,但在封闭对象中使用起来还是比较方便的:

				SimpleDateFormat format = new SimpleDateFormat(“yyyyMMdd”);
                String formatDate = format.format(new Date());

一般获取当前日期的字符串形式都是这样。
当传入的日期格式:new SimpleDateFormat(“ddSSJJ”);类似这种就会抛出异常,这是我们只要把异常捕捉住就可以轻松方便的知道日期格式是否合格啦。例如:

	try {
            // 判断是否是日期格式
            SimpleDateFormat format = new SimpleDateFormat(strSn);
            String formatDate = format.format(new Date());
             LOG.info(strSn + "是日期格式,输出:" + formatDate);
             return formatDate;
        } catch (Exception e) {
            // 非日期格式
            LOG.error(strSn + "不是日期格式", e);
            return null;
        }

简洁易懂,清晰明了。几行代码轻松搞定日期格式的检测,但是组内大佬有提出啦,每次生成单号是都需要大量检测单号规则,日志上打印出大片的错误信息(也就是这个: LOG.error(strSn + “不是日期格式”, e);),到时候可能会迷惑人找真正错误信息。但去掉错误日志打印他又说不符合规范,于是乎又得重新想其他办法…

解决方法3:日期检测工具类

个人觉得方法二是最简单直接的方法。如果使用方法一,不是我会不会把所有的日期格式的正则写漏,就是写出来也得花耗非常大的时间,而且是无脑的劳动。打死我也不想干啊!!!但大佬提出的需求又不能不满足对吧!于是乎想在第二种的方法上优化,前提还是不能把错误日志吃掉,大佬规定:有错误日志必须

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ripley_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值