商品批次号解析工具类
背景:商品的批次号规则为恒定为八位日期数字“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<Date> getDates(String batchNumber, Integer month) { List<Date> 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; } }