商品批次号解析工具类

背景:商品的批次号规则为恒定为八位日期数字”yyyyMMdd”,如”20200520″,代表着该商品是2020年05月20日生产的,该商品的效期是恒定的,单位为月

需求:批次号输入的时候校验格式,通过批次号和效期得到生产日期和失效日期

方法:

一、建立批号工具类(BatchNumberUtil)

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @ClassName BatchNumberUtil
 * @Description 批次号工具
 * @Author 北海派
 * @Date 2020/5/20 12:25
 * @Version 1.0
 **/
public class BatchNumberUtil {

    private static final Logger log = LoggerFactory.getLogger("BatchNumberUtil.class");

    /**
     * 校验格式
     *
     * @param batchNumber 20200508
     * @return
     */
    public static boolean isValidDate(String batchNumber) {
        boolean result = true;
        if (!StringUtils.isEmpty(batchNumber)) {
            SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
            try {
                format.setLenient(false);
                format.parse(batchNumber);
            } catch (ParseException e) {
                result = false;
                log.error("批次号格式异常:{}", batchNumber);
            }
        } else {
            result = false;
        }
        return result;
    }

    /**
     * 获取生产日期和失效日期
     *
     * @param batchNumber 批次号
     * @param month       效期(月数)
     * @return
     */
    public static List getDates(String batchNumber, Integer month) {

        List dateList = new ArrayList<>();
        Calendar calendar = Calendar.getInstance();
        Date production = null;
        Date invalid;
        if (!StringUtils.isEmpty(batchNumber) && month != null && month > 0) {
            SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
            try {
                format.setLenient(false);
                production = format.parse(batchNumber);
            } catch (ParseException e) {
                log.error("批次号格式异常:{}", batchNumber);
            }
            if (null != production) {
                calendar.setTime(production);
                calendar.add(Calendar.MONTH, month);
                invalid = calendar.getTime();

                dateList.add(0, production);
                dateList.add(1, invalid);
            }
        }
        return dateList;

    }
}

Original: https://www.cnblogs.com/java-bhp/p/12922911.html
Author: 包海鹏-郑州JAVA
Title: 商品批次号解析工具类

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/589035/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Spring XmlBeanFactory 容器的基本实现

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月8日
    081
  • Nginx-初识篇

    一、Nginx的简介 1. Nginx是什么 Nginx(engine x)是一个具有高性能的【HTTP】和【反向代理】的【Web服务器】,同时也是一个【POP3/SMTP/IMA…

    Java 2023年6月6日
    086
  • Mysql 日期格式化 复杂日期区间查询

    最近在做项目涉及到 Mysql的复杂日期查询,日期查询其实在数据库中查询其实还是用的挺多的,比如查询开始日期到结束日期的区间信息,查询日期小于有效日期的信息,查询当天的日期,明天的…

    Java 2023年6月13日
    068
  • 【并发】ExecutorCompletionService使用

    介绍 ExecutorCompletionService是线程池和队列的配合使用,可以将线程池执行完成的结果存入队列当中,通过take或者poll方法获取执行完成的结果 遇到的场景…

    Java 2023年6月8日
    058
  • 全量同步Elasticsearch方案之Canal

    一、前言 Canal 是阿里的一款开源项目,纯 Java 开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了 MySQL(也支持 mariaDB)。 Ca…

    Java 2023年6月6日
    073
  • 探秘Java虚拟机——内存管理与垃圾回收

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt106 1、Java虚拟机运行时的数据区 2、常用的内存区…

    Java 2023年5月29日
    075
  • 解决eclipse为什么不能查看源码

    自己学习路上用过的方法,有帮助记得点赞哟~ Java eclipse中查看源代码ctrl+左键单击 一、你是第一次使用该功能,没有导入项目源码,故无法查看源码 解决方法: ​1.点…

    Java 2023年6月5日
    091
  • Spring-Cloud-Commons模块

    本文介绍SpringCloud的另一个基础模块 Spring Cloud Commons模块 。只要在项目的pom文件中引入了 spring-cloud-starter 依赖包 ,…

    Java 2023年5月30日
    071
  • SpringCloudAlibaba项目之生产者与消费者

    SpringCloudAlibaba随笔目录 一、SpringCloudAlibaba项目之父工程搭建 二、 SpringCloudAlibaba项目之Nacos搭建及服务注册 三…

    Java 2023年6月5日
    093
  • Java邮件发送中的setRecipient方法使用

    一、方法 setRecipient(Message.RecipientType type, Address address),是用于设置邮件的接收者。 1、有两个参数,第一个参数是…

    Java 2023年6月7日
    058
  • EasyExcel使用心得

    &#x6700;&#x8FD1;&#x9879;&#x76EE;&#x4E2D;&#x7528;&#x5230;&#…

    Java 2023年6月13日
    061
  • SpringBoot+schedule+可以动态添加或删除定时任务

    转载:https://blog.csdn.net/Nicky_LC/article/details/106961779?spm=1001.2101.3001.6661.1&…

    Java 2023年5月30日
    087
  • StatementHandler-Mybatis源码系列

    内容更新github地址:我飞 StatementHandler接口 StatementHandler封装了Mybatis连接数据库操作最基础的部分。因为,无论怎么封装,最终我们都…

    Java 2023年6月14日
    088
  • SpringCloud-Ribbon

    1. Ribbon简介 Ribbon是一个基于HTTP和TCP的客户端负载均衡器,当使用Ribbon对服务进行访问的时候,他会扩展Eureka客户端的服务发现功能,实现从Eurek…

    Java 2023年6月7日
    072
  • Java反射基础

    Java作为一门动态的语言,有非常成熟的框架技术以供我们使用,而这一切都离不开Java反射技术的支持。通过Java反射,我们可以动态的创建和使用对象,使用灵活,没有反射机制,就无法…

    Java 2023年6月8日
    075
  • 除了Synchronized关键字还有什么可以保证线程安全?

    日常使用Java开发时,多线程开发,一般就用Synchronized保证线程安全,防止并发出现的错误和异常,那么除了Synchronized关键字还有什么可以保证线程安全吗? 什么…

    Java 2023年6月13日
    059
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球