iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么用Java根据日期生成流水号
  • 550
分享到

怎么用Java根据日期生成流水号

2023-06-14 19:06:23 550人浏览 八月长安
摘要

这篇文章主要介绍怎么用Java根据日期生成流水号,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布性,Ja

这篇文章主要介绍怎么用Java根据日期生成流水号,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Java的优点是什么

1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布性,Java是面向网络的语言;4. 鲁棒性,java提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。;5. 安全性,用于网络、分布环境下的Java必须防止病毒的入侵。6. 体系结构中立,只要安装了Java运行时系统,就可在任意处理器上运行。7. 可移植性,Java可以方便地移植到网络上的不同机器。8.解释执行,Java解释器直接对Java字节码进行解释执行。

生成流水号,在企业中可以说是比较常见的需求,尤其是订单类业务。

一般来说,需要保证流水号的唯一性。

如果没有长度和字符的限制,那么直接使用UUID生成一个唯一字符串即可,也可以直接使用数据库表中的主键,主键就是唯一的。

那么,如果限制了流水号必须多少位,这种怎么生成呢?

可以采用"前缀+日期+数字"的方式(ps:此方式是需要用到缓存的)

前缀:为了更好的标识这个流水号是属于哪种类型;

日期:为了防止重复;

数字:为了表示当前的流水所处序号。

需求:生成一个17位数的唯一流水号,“LSH”+yyyyMMdd+6位数字

代码实现

import java.text.SimpleDateFORMat;import java.util.Calendar;import java.util.Date;import java.util.GreGorianCalendar;import java.util.concurrent.atomic.AtomicInteger;public class SerialNoTest {    public static void main(String[] args) {        String serialNo = generateSerialNo();        System.out.println("生成的流水号:"+serialNo);    }        private static String generateSerialNo(){        //定义需要返回的流水号        String serialNo = null;        //先查询到今天的日期,格式:"yyyyMMdd"        String todayDate = new SimpleDateFormat("yyyyMMdd")                                .format(new Date());        //固定字母前缀 拼接 今天日期,组成新的完整的前缀,也就是缓存的key        String cacheKey = "LSH"+todayDate;        //再通过key查询缓存有没有num数据,缓存操作根据自身项目封装工具类        Long codeNum = cacheService.getCache(cacheKey, Long.class);        //如果缓存查询有值,数值+1,再赋值给下一个流水号        if (null != codeNum) {            codeNum = codeNum + 1L;        } else {            //如果缓存查询没值,直接赋值为1            codeNum = 1L;        }        //流水号 = 缓存key + 拼接的数值 = 前缀 + 日期 + 拼接的数值        serialNo = getCodeOfSix(cacheKey, codeNum.intValue());        //设置缓存,调用此方法,会自动将key所对应的value+1,保存时长:今天剩余的时间        cacheService.incr(cacheKey, getSeconds());        return serialNo;    }        public static String getCodeOfSix(String prefix,int nowNum ) {        //需要返回的code        StringBuilder codeSb = new StringBuilder();        //需要拼接的数字        StringBuilder numSb = new StringBuilder();        //封装的数字对象,里面 value 加了 volatile关键字,保证了线程安全        AtomicInteger count = new AtomicInteger(nowNum);        //将数值补足为6位字符串        if (count.get() < 10) {            numSb.append("00000").append(count.get());        } else if(count.get() < 100){            numSb.append("0000").append(count.get());        }else if(count.get() < 1000){            numSb.append("000").append(count.get());        }else if(count.get() < 10000){            numSb.append("00").append(count.get());        }else if(count.get() < 100000){            numSb.append("0").append(count.get());        } else if (count.get() >= 100000) {            numSb.append(count.get());        }        //先拼接前缀        codeSb.append(prefix);        //再拼接数字        codeSb.append(numSb);        return codeSb.toString();    }        public static int getSeconds(){//获取今天当前时间        Calendar curDate = Calendar.getInstance();//获取明天凌晨0点的日期        Calendar tommorowDate = new GregorianCalendar(                curDate.get(Calendar.YEAR),                curDate.get(Calendar.MONTH),                 curDate.get(Calendar.DATE) + 1,                0, 0, 0);//返回 明天凌晨0点 和 今天当前时间 的差值(秒数)         return (int)(tommorowDate.getTimeInMillis() - curDate .getTimeInMillis()) / 1000;    }}

假如今天是2021年4月22日,运行项目,生成的第1个流水号则为:LSH20210422000001

第2个流水号则为:LSH20210422000002,依次类推。

需要注意的是:

如果限制了位数,6位数字每天最多能生成10w个流水号,所以,这个数字位数根据具体业务量进行调整。

如果每天的生成数量量不到1w,那么使用4位数字即可。

以上是“怎么用Java根据日期生成流水号”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 怎么用Java根据日期生成流水号

本文链接: https://www.lsjlt.com/news/274563.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用Java根据日期生成流水号
    这篇文章主要介绍怎么用Java根据日期生成流水号,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布性,Ja...
    99+
    2023-06-14
  • 教你如何用Java根据日期生成流水号
    前言 生成流水号,在企业中可以说是比较常见的需求,尤其是订单类业务。 一般来说,需要保证流水号的唯一性。 如果没有长度和字符的限制,那么直接使用UUID生成一个唯一字符串即可,也可以...
    99+
    2024-04-02
  • JAVA怎么根据流生成PDF文件
    Java中可以使用iText库来根据流生成PDF文件。iText是一个开源的Java库,用于处理PDF文件。首先,需要下载iText...
    99+
    2023-08-15
    JAVA
  • java怎么根据日期取得星期
    本篇内容介绍了“java怎么根据日期取得星期”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!方法一、 public static String...
    99+
    2023-06-03
  • Java怎么生成日期时间存入Mysql数据库
    这篇文章主要介绍“Java怎么生成日期时间存入Mysql数据库”,在日常操作中,相信很多人在Java怎么生成日期时间存入Mysql数据库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么生成日期时间存...
    99+
    2023-06-29
  • sql怎么根据日期查询数据
    在SQL中,可以使用"WHERE"子句来根据日期查询数据。具体步骤如下: 确定要查询的表和字段。 例如,假设有一个名为"...
    99+
    2023-10-25
    sql
  • 怎么使用PHP根据星期几来判断日期
    这篇文章主要介绍“怎么使用PHP根据星期几来判断日期”,在日常操作中,相信很多人在怎么使用PHP根据星期几来判断日期问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用PHP根据星期几来判断日期”的疑惑有所...
    99+
    2023-07-06
  • java怎么根据xml模板生成xml文件
    在Java中,可以使用DOM(Document Object Model)或者JAXB(Java Architecture for ...
    99+
    2024-03-07
    java
  • JAVA怎么根据时间戳生成文件夹
    在Java中,可以使用`java.io.File`类来创建文件夹。根据时间戳生成文件夹的步骤如下: 获取当前时间戳,可以使用`Sy...
    99+
    2023-10-24
    JAVA
  • php怎么根据日期判断周几
    今天小编给大家分享一下php怎么根据日期判断周几的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。使用 PHP 标准库函数PHP...
    99+
    2023-07-05
  • MSSQL中怎么生成日期列表
    这篇文章给大家介绍MSSQL中怎么生成日期列表,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。代码如下: if exists (select * from dbo.sysobj...
    99+
    2024-04-02
  • hive怎么生成连续的日期
    在Hive中,可以使用GENERATE语句和LATERAL VIEW来生成连续的日期。例如,以下是一个生成连续日期的示例代码: SE...
    99+
    2024-03-01
    hive
  • 怎么使用HouTu根据MySQL生成Java类的开源库
    这篇文章主要介绍“怎么使用HouTu根据MySQL生成Java类的开源库”,在日常操作中,相信很多人在怎么使用HouTu根据MySQL生成Java类的开源库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使...
    99+
    2023-06-01
  • 怎么根据日期来查询mysql的binlog日志
    本篇内容介绍了“怎么根据日期来查询mysql的binlog日志”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • 使用pandas怎么根据日期做分组运算
    这篇文章将为大家详细讲解有关使用pandas怎么根据日期做分组运算,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。原始数据TS PERIOD REQUEST ST...
    99+
    2023-06-14
  • mybatis+mysql 使用存储过程生成流水号的实现代码
    使用存储过程,在操作数据库时开启事务,避免并发时同时操作造成数据重复 CREATE DEFINER=`root`@`localhost` PROCEDURE `GetSerialNo`(IN tsCo...
    99+
    2024-04-02
  • java根据数据生成图片的方法是什么
    在Java中,可以使用Java 2D图形库来生成图片。以下是生成图片的一种常见方法:1. 创建一个BufferedImage对象,该...
    99+
    2023-09-17
    java
  • 怎么使用cmd根据WSDL网址生成java客户端代码
    小编给大家分享一下怎么使用cmd根据WSDL网址生成java客户端代码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!windows下使用cmd命令提示符生成jav...
    99+
    2023-06-14
  • excel表格中日期怎么自动生成
    这篇文章给大家分享的是有关excel表格中日期怎么自动生成的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。表格中日期自动生成的方法:首先打开需要自动生成日期的excel表格,选中一个单元格;然后按键盘上的“ctrl...
    99+
    2023-06-14
  • 利用JAVA如何根据概率生成随机数
    这期内容当中小编将会给大家带来有关利用JAVA如何根据概率生成随机数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。具体方法如下:import java.util.ArrayList;import...
    99+
    2023-05-31
    java ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作