生成日期流水号帮助类

 /// <summary>
    /// 生成日期流水号
    /// </summary>
    public class DateSerialNumberGenerator
    {
        private static readonly object Lock = new object();

        private static string _nowYear;//系统年份

        private static string _nowMonth;//系统月份

        /// <summary>
        /// 获取下一个日期流水号 , 步长=1
        /// </summary>
        /// <param name="thisSNumber">当前流水 - 位长[>=7] - 格式[YYYYMMXXX]</param>
        /// <param name="minSNumberLength">字串位长,默认=7</param>
        /// <returns></returns>
        public static string GetNextSNumber(string thisSNumber = null, int minSNumberLength = 9)
        {
            //获取系统时间
            _nowYear = DateTime.Now.Year.ToString();

            _nowMonth = DateTime.Now.Month.ToString().PadLeft(2, ‘0‘);

            //为空生成当年/月第一个序列号
            if (string.IsNullOrEmpty(thisSNumber) || thisSNumber.Length < minSNumberLength)
            {
                return _nowYear + _nowMonth + "1".PadLeft(minSNumberLength - _nowYear.Length - _nowMonth.Length, ‘0‘);
            }

            lock (Lock)
            {
                //截取参数时间
                var year = thisSNumber.Substring(0, 4);

                var month = thisSNumber.Substring(4, 2);

                var num = thisSNumber.Substring(6);

                //跨年判定
                if (year.Equals(_nowYear))
                {
                    //跨月判定
                    if (month.Equals(_nowMonth))
                    {
                        return year + month + GetFormatNum(num, thisSNumber.Length);
                    }
                    return year + _nowMonth + "1".PadLeft(thisSNumber.Length - _nowYear.Length - _nowMonth.Length, ‘0‘);
                }
                return _nowYear + _nowMonth + "1".PadLeft(thisSNumber.Length - _nowYear.Length - _nowMonth.Length, ‘0‘);
            }
        }

        /// <summary>
        /// 位移格式化序列号
        /// </summary>
        /// <param name="num">序列号</param>
        /// <param name="numberlenght">字串位长</param>
        /// <returns></returns>
        private static string GetFormatNum(string num, int numberlenght)
        {
            string nowNum = (Convert.ToInt32(num) + 1).ToString();

            return nowNum.PadLeft(numberlenght - _nowYear.Length - _nowMonth.Length, ‘0‘);
        }
    }

结果:

201807001

原文地址:https://www.cnblogs.com/shiruina/p/9359736.html

时间: 2024-10-10 09:27:29

生成日期流水号帮助类的相关文章

流水号的生成(日期+业务码+自增序列)

项目开发时,使用了两套数据库,开发环境和上线环境,数据库表中大多采用了自增主键, 比如: id int unsigned primary key auto_increment, 但往往会碰到一些问题,比如: 开发环境中,使用爬虫抓取一些数据,建立索引,再把数据迁移到上线环境,会导致索引中的id和 上线环境数据库中id对不上,所以决定使用字符串作为主键. 那么问题来了,如何生成唯一的序列号? 格式按照:yyyyMMdd+两位业务码+10位的自增序列, 比如20150101**99**0000000

Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的特点

1.不变性 新的日期/时间API中,所有的类都是不可变的,这对多线程环境有好处. 比如:LocalDateTime 2.关注点分离 新的API将人可读的日期时间和机器时间(unix timestamp)明确分离,它为日期(Date).时间(Time).日期时间(DateTime).时间戳(unix timestamp)以及时区定义了不同的类. 不同时间分解成了各个类,比如:LocalDate, LocalTime, LocalDateTime, Instant,Year,Month,YearMo

Java 日期、时间类

Java 原本提供了 Date 和 Calendar 用于处理日期.时间的类,包括创建日期.时间对象,获取系统当前日期.时间等操作.但 Date 不仅无法实现国际化,而且它对不同属性也使用了前后矛盾的偏移量,比如月份与小时都是从0开始的,月份中的天数则是从1开始的,年又是从1900开始的,而 java.util.Calendar 则显得过于复杂,从下面介绍中会看到传统 Java 对日期.时间处理的不足.Java8 吸取了 Joda-Time 库(一个被广泛使用的日期.时间库)的经验,提供了一套全

java日期比较工具类

package com.net.util; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException; /** * 日期比较工具类 * @author zhangdi * */ public class DateUtil { /** *

从下往上增加的柱状图生成动画(适用于统计类应用)

我们在一些统计,理财应用中,经常能看到很多的柱状图,用来直观的标注信息,最近一个朋友刚好在做这方面的应用,跑来问我这个怎么实现,我笑他不就是简单的实现一个动画嘛,额,然后自己去做的时候才发现各种坑. 1.所有的UIView子类中,UILabel不能实现效果 2.创建View和对View实现的动画效果要放在一个方法中 3.增加的height和减少的top(顶部y坐标)必须成2倍关系 或者 增加的height和增加的bottom(底部y坐标)必须成2倍关系 @最后,直接上代码,大家可以去试验下,我也

C# 常用日期类型转换帮助类

本文转载:http://www.cnblogs.com/iamlilinfeng/p/3378659.html 最近工作比较忙,与此同时自己也在业余时间开发一个电子商务网站.虽然每天都很累,但感觉过的相当充实.由于时间紧张,最近没有经常来园子,只是有人留言的时候过来回复下.今天过来刷刷存在感. 二.应用场景举例 1.按指定日期查询 (1)用户在UI上选择日期; (2)系统计算出今天的起始时间(****年**月**日 00:00:00)和今天的结束时间(****年**月**日 23:59:59);

如何由XSD自动生成XML和实体类

项目中有时候要用XML作为数据源,因此需要定义XML文件和相应的类,最佳方法是首先定义XSD,然后自动生成实体类,最后生成XML和填充数据:读取XML数据源的时候,首先用XSD验证XML数据格式,然后自动读入实体类使用. 定义XSD的过程就是类似设计表结构的过程,二者也可以相互转化. 本文讨论了如何定义XSD文件(XML Schema),然后自动生成实体类,最后生成XML的过程,以及如何根据XSD验证XML文件的合法性.以供大家做项目时参考. 1. 首先在VS2005中添加一个XSD文件.例子X

一个生成网页验证码的类 (mycome-validate)

一个小练习 可以通过 BufferedImage next() 返回一个内存图片 也可以通过String void next(OutputStream out) 写到一个输出流中,并返回验证码的值 jar包下载:http://files.cnblogs.com/mycome/mycome-validate.zip package validate; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; i

hibernate的反转引擎生成两个实体类的问题

在使用myeclipse中自带的hibernate 进行jsp开发时候遇到了这个问题.使用hibernate的反转引擎从数据库生成生成实体类,一个表生成了两个类,xx.java和xxId.java .显示的问题如下 其问题的根本在于没有设置对应表的主键.